React组件类别

96 阅读2分钟

React的组件化

  1. 按照不同的方式可以分成很多类组件:

    • 根据组件的定义方式,可以分为:函数组件(Functional Component )和类组件(Class Component);
    • 根据组件内部是否有状态需要维护,可以分成:无状态组件(Stateless Component )和有状态组件(Stateful Component);
    • 根据组件的不同职责,可以分成:展示型组件(Presentational Component)和容器型组件(Container Component);
  2. 数据逻辑和UI展示的分离:

    • 函数组件、无状态组件、展示型组件主要关注UI的展示;
    • 类组件、有状态组件、容器型组件主要关注数据逻辑;
  3. 异步组件、高阶组件等

类组件

  1. 类组件的定义有如下要求:
    • 组件的名称是大写字符开头(无论类组件还是函数组件)
    • 类组件需要继承自 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:什么都不渲染。
    
// 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
  }
}

函数组件

  1. 函数组件有自己的特点(hooks就不一样了):
    • 没有生命周期,也会被更新并挂载,但是没有生命周期函数;
    • this关键字不能指向组件实例(因为没有组件实例);
    • 没有内部状态(state);
    // 函数式组件
function App(props) {
  // 返回值: 和类组件中render函数返回的是一致
  return <h1>App Functional Component</h1>
}

export default App