React入门:从入口文件到组件化的奥秘
在前端开发领域,React和Vue的出现,标志着前端开发者可以“Say goodbye to DOM coding”,即不必再直接与DOM元素频繁互动,他们引领着我们告别传统的DOM操作时代,迈入MVVM(Model-View-ViewModel)模式的崭新天地。
一、React入门
我们来到React项目入口文件index.js
中,这是React应用的起点。
import ReactDOM from 'react-dom/client';
const root=ReactDOM.createRoot(
document.getElementById('root')
);
root.render(<h1>征程</h1>)
通过import ReactDOM from 'react-dom/client';
引入了React的DOM渲染库,而ReactDOM.createRoot()
方法则标志着React接管DOM的第一步。这个方法接收一个DOM元素作为参数(如document.getElementById('root')
),为React创建了一个挂载点。从这一刻起,React将独立管理这部分DOM,也就是这里将成为React展示的舞台,根节点root
内部就是react的世界了,此后的所有React组件将在这个根节点下进行渲染。root.render()
方法接收一个React元素作为参数,并将其渲染到与root
关联的DOM节点上。
二、JSX:让JavaScript拥抱HTML
在React的世界里,JSX是最具特色的语法糖。通过允许在JavaScript中直接编写类似HTML的代码,极大地提升了代码的可读性和编写效率。
import ReactDOM from 'react-dom/client';
import React from 'react';
const root=ReactDOM.createRoot(
document.getElementById('root')
);
// react 的法宝 : JSX语法
const element1 = (<h1>正大会</h1>)
const element2 =React.createElement('div',{id:'name'},'正小会')
// root.render(element1)
root.render(element2)
<h1>正大会</h1>
这样的JSX表达式,不仅直观地描述了UI结构,而且与React.createElement()
相比,更加简洁明了。JSX背后,是编译器将其转换为React元素(如React.createElement('h1', null, '正大会')
)的过程,从而确保了JavaScript引擎的正常解析执行。也就是说明,在react中我们只要运用JSX,就可以在JavaScript直接编写HTML。
三、职责分离
React鼓励我们以函数或类的形式定义组件,每个组件负责渲染一块UI,这种设计模式大大促进了代码的复用和维护。
import ReactDOM from 'react-dom/client';
import React from 'react';
// module 模块化的导入
import APP from './app/app';
const root =ReactDOM.createRoot(
// 就做这一次DOM查找,ReactDOM来做查找
// DOM编程 性能很差
document.getElementById('root')
)
root.render(<APP/>)
将index.js
就用于生成一个root节点,而其他的东西就交给其他的组件APP
,但是要注意的是,root.render()
接受的是一个参数,所以根组件里必须返回一个值。
// 根组件
// react 使用函数创建一个组件,一定要返回JSX
// 页面由组件组成(更利于复用)
const APP = ()=>{
const element = (
<div className='container'>
<h1> classname='title'>周老板</h1>
</div>
)
return element
}
// module 模块化的输出
export default APP
通过定义const APP = ()=>{...}
这样的函数创建一个组件,而在组件中我们可以写一堆的HTML、css、js,而页面将由组件组成,更利于复用。而组件内部可以继续嵌套其他组件(AppHeader
组件),如<AppHeader />
,形成了一个组件树结构,这便是React应用的核心架构。
import AppHeader from './components/app-header';
const APP = ()=>{
const element = (
<div className='container'>
<AppHeader/>
<AppHeader />
</div>
)
return element
}
export default APP
四、组件化
组件化是React的灵魂。它允许我们将界面拆分成多个独立、可复用的部分,每个部分都有自己的状态和生命周期。
const AppHeader = (props)=>{
const {name}= props;
return (
<div className="app-header">
<h1 className="title">{name}</h1>
</div>
)
}
export default AppHeader
AppHeader
组件是可以传入参数的,别忘了他是由函数来创建的。通过属性(props)传递数据(如name
),这样就可以获取调用AppHeader
的那个组件中的name值,更加利于复用。
import AppHeader from './components/app-header';
const APP = ()=>{
const element = (
<div className='container'>
<AppHeader name='吴彦祖'/>
<AppHeader name='彭于晏'/>
</div>
)
return element
}
export default APP
组件之间可以进行通信,同时保持各自的纯净性,降低了耦合度。组件化不仅提高了代码的组织性和可测试性,也为大规模应用的开发提供了有力支撑。
结语
React不仅仅是一个库,它代表了一种全新的前端开发范式。通过ReactDOM.createRoot
与JSX的巧妙结合,React让我们能够在JavaScript中以声明式的方式描述UI,通过组件化思想实现界面的模块化开发。这一系列机制,不仅提升了开发效率,也使得代码更易于理解和维护。不愧是“前端第一框架”,这可不是虚名昂。接下来,我将持续学习并分享,让我们一起加油!!
转载自:https://juejin.cn/post/7385752495535276047