Skip to content

React的组件化

React的组件相对于vue更加的灵活和多样,按照不同的方式可以分为很多类组件

  • 根据组件的定义方式,可分为:函数组件( Functional Component )和类组件( Class Component )
js
// 类组件
class App extends React.Component {
    
}

// 函数组件
funcion App() {
    
}

一般情况下问到组件的分类,就是函数组件和类组件,但是其他分类也需要了解

  • 根据组件内部是否有状态需要维护,可以分为:无状态组件( Stateless Component )和有状态组件( Stateful Component )

一般认为函数组件是无状态组件,类组件是有状态组件

但是类组件在没有自己状态的情况下也可以称为无状态组件

  • 根据组件的不同职责,可以分为:展示类组件( Presentational Component )和容器型组件( Container Component )

还有很多组件的其他概念:比如异步组件、高阶组件等

类组件

类组件定义的要求

  • 组件的名称是大写字符开头(无论类组件还是函数组件)
  • 类组件需要继承自React.Component
  • 类组件必须实现render函数

使用class定义一个组件:

  • constructor是可选的,我们通常在constructor中初始化一些数据
  • this.state中维护的就是我们组件内部的数据
  • render()方法是class组件中唯一必须实现的方法

render函数的返回值

当render被调用时,它会检查this.props和this.state的变化并返回以下类型之一:

  • React元素:

    • 通常通过jsx创建
    • 例如,<div/>会被react渲染为dom节点,<MyComponent/>会被react渲染为自定义组件
    • 两者均为react元素
  • 数组或fragments:使得render方法可以返回多个元素

  • Portals:可以渲染子节点到不同的dom子树中

  • 字符串或数值类型:它们在dom中会被渲染为文本节点

  • 布尔类型或null:什么都不渲染

函数组件

函数组件是使用function来进行定义的函数,只是这个函数会返回和类组件中render函数返回一样的内容

函数组件有自己的特点(和hook不一样)

  • 没有生命周期,也会被更新并挂载,但是没有生命周期函数
  • this关键字不能指向组件实例(因为没有组件实例)
  • 没有内部状态(state)

定义一个函数组件:

jsx
export default function App() {
    return (
    	<div>Hello Liwenting</div>
    )
}