从零开始学React-coderwhy React课程笔记(五)

200 阅读3分钟

类-函数组件-生命周期-组件拆分-嵌套-通讯

组件化开发

概念

  • 将页面的复杂逻辑拆分成一个个小功能块,每个组件负责实现页面的一个功能块。
  • 组件化提供了一种抽象,让我们可以开发出一个个独立可复用的小组件来构造我们的应用。

分类

  • 根据组件的定义方式,可以分为:函数组件和类组件
  • 根据组件内部是否有状态需要维护,可以分成:无状态组件和有状态组件
  • 根据组件的不同职责,可以分成:展示型组件和容器型组件

创建 React 组件

类组件

  • 组件的名称是大写字符开头(无论类组件还是函数组件)
  • 类组件需要继承自 React.Component
  • 类组件必须实现一个 render 函数
class App extends React.Component {
  // 构造函数
  constructor() {
    super();
    this.state = {
      count: 0,
    };
  };
​
  render() {
    const {count} = this.state
    return (
      <div>{count}</div>
    );
  }
}

函数组件

在没有使用 Hooks 的情况下,函数组件的特点如下:

  • 没有生命周期,也会被更新并挂载,但是没有生命周期函数;
  • this关键字不能指向组件实例(因为没有组件实例);
  • 没有内部状态(state);
export default function App() {
  // 对应类组件 render 函数返回的内容
  return (
    <div>123</div>
  )
}

函数组件最初是只负责展示数据,没有内部状态。但后面提出 Hooks 之后,对函数组件做了很多增强。

生命周期

组件从创建到销毁的整个过程,被称之为生命周期

ogimage

挂载的过程

  1. 创建实例,执行 constructor 构造方法
  2. 执行 render 方法
  3. 组件被渲染(挂载)到 DOM,执行 componentDidMount 方法

更新的过程

  1. 执行render 方法
  2. 组件的 DOM 更新完成,执行 componentDidUpdate 方法

卸载的过程

  1. 执行 componentWillUnmount 方法
  2. 组件从 DOM 中卸载掉:从 DOM 中移除

常用生命周期函数

React 还提供了一些生命周期的钩子函数,待生命周期的阶段完成后,就会触发这些钩子函数的回调。

componentDidMount

  • componentDidMount() 会在组件挂载后(插入 DOM 树中)立即调用。
  • componentDidMount 中通常进行哪里操作呢?

    • 依赖于DOM的操作可以在这里进行;
    • 在此处发送网络请求就最好的地方;(官方建议)
    • 可以在此处添加一些订阅(要在 componentWillUnmount 取消订阅);

componentDidUpdate

  • componentDidUpdate() 会在更新后会被立即调用,首次渲染不会执行此方法。

    • 当组件更新后,可以在此处对 DOM 进行操作;
    • 如果你对更新前后的 props 进行了比较,也可以选择在此处进行网络请求;(例如,当 props 未发生变化时,则不会执行网络请求)。

componentWillUnmount

  • componentWillUnmount() 会在组件卸载及销毁之前直接调用。

    • 在此方法中执行必要的清理操作;
    • 例如,清除 timer,取消网络请求或清除在 componentDidMount() 中创建的订阅等;

组件嵌套

将组件进行拆分,拆分成一个个小的组件;再将这些组件组合嵌套在一起,最终形成我们的应用程序;

如何快速创建组件

在 VSCode 里面安装一个插件 ES7+ React/Redux/React-Native snippets,里面提供了很多代码片段