React的组件化
-
按照不同的方式可以分成很多类组件:
- 根据组件的定义方式,可以分为:函数组件(Functional Component )和类组件(Class Component);
- 根据组件内部是否有状态需要维护,可以分成:无状态组件(Stateless Component )和有状态组件(Stateful Component);
- 根据组件的不同职责,可以分成:展示型组件(Presentational Component)和容器型组件(Container Component);
-
数据逻辑和UI展示的分离:
- 函数组件、无状态组件、展示型组件主要关注UI的展示;
- 类组件、有状态组件、容器型组件主要关注数据逻辑;
-
异步组件、高阶组件等
类组件
- 类组件的定义有如下要求:
- 组件的名称是大写字符开头(无论类组件还是函数组件)
- 类组件需要继承自 React.Component
- 类组件必须实现render函数
-
使用class定义一个组件:
- constructor是可选的,我们通常在constructor中初始化一些数据;
- this.state中维护的就是我们组件内部的数据;
- render() 方法是 class 组件中唯一必须实现的方法;
-
render函数的返回值,当 render 被调用时,它会检查 this.props 和 this.state 的变化并返回以下类型之一:
- React 元素:
- 通常通过 JSX 创建。
- 例如,会被 React 渲染为 DOM 节点, 会被 React 渲染为自定义组件;
- 无论是 还是 均为 React 元素。
- 数组或 fragments:使得 render 方法可以返回多个元素。
- Portals:可以渲染子节点到不同的 DOM 子树中。
- 字符串或数值类型:它们在 DOM 中会被渲染为文本节点
- 布尔类型或 null:什么都不渲染。
- React 元素:
// 1.类组件
class App extends React.Component {
constructor() {
super()
this.state = {
message: "App Component"
}
}
render() {
// const { message } = this.state
// 1.react元素: 通过jsx编写的代码就会被编译成React.createElement, 所以返回的就是一个React元素
// return <h2>{message}</h2>
// 2.组件或者fragments
// return ["abc", "cba", "nba"]
// return [
// <h1>h1元素</h1>,
// <h2>h2元素</h2>,
// <div>哈哈哈</div>
// ]
// 3.字符串/数字类型
// return "Hello World"
return true
}
}
函数组件
- 函数组件有自己的特点(hooks就不一样了):
- 没有生命周期,也会被更新并挂载,但是没有生命周期函数;
- this关键字不能指向组件实例(因为没有组件实例);
- 没有内部状态(state);
// 函数式组件
function App(props) {
// 返回值: 和类组件中render函数返回的是一致
return <h1>App Functional Component</h1>
}
export default App