React的生命周期演示-新(12)

简介: 【8月更文挑战第15天】React的生命周期演示-新

react的最新生命周期和旧版有一些区别,它删除了包含"will"关键词的钩子函数,增加了getDerivedStateFromProps和getSnapshotBeforeUpdate两个新钩子
image.png

getDerivedStateFromProps

getDerivedStateFromProps是React 16.3版本引入的一个新的生命周期钩子函数。它的作用是根据新的props和state来派生出一个新的state。这个生命周期函数在组件实例化、接收新的props、和父组件强制更新的时候都会调用。
它的用法类似于旧版的componentWillReceiveProps,但是getDerivedStateFromProps有两个参数:

  • props:最新的props值
  • state:当前组件的state

它的返回值应该是一个对象,代表着组件的新状态。如果不需要更新状态,则返回null。
这个函数在一定程度上能够减少由于componentWillReceiveProps导致的bug,因为它必须返回一个新的state,不能直接修改当前的state。这样做有一个好处,就是可以更好地控制状态的变化流程,增加组件的稳定性。

注:这个钩子几乎不使用

getSnapshotBeforeUpdate

getSnapshotBeforeUpdate 是 React 组件生命周期中的一个钩子函数,它在组件更新 DOM 之前调用,常常用于处理在组件更新后,需要获取 DOM 相关信息的情况。
在每次组件更新时,getSnapshotBeforeUpdate 都会被调用,并且在 render 方法之后被调用。其返回值可以作为 componentDidUpdate 方法的第三个参数传入,从而能够在 componentDidUpdate 中访问到前一时刻的 DOM 信息。
一个典型的 getSnapshotBeforeUpdate 方法的实现可能如下所示:

class ExampleComponent extends React.Component {
   
   
  constructor(props) {
   
   
    super(props);
    this.myRef = React.createRef();
    this.state = {
   
   
      message: "",
    };
  }

  getSnapshotBeforeUpdate(prevProps, prevState) {
   
   
    // 计算更新前的 DOM 高度
    const prevHeight = this.myRef.current.scrollHeight;
    return prevHeight;
  }

  componentDidUpdate(prevProps, prevState, snapshot) {
   
   
    // 对比更新前后的 DOM 高度,并更新其它相关状态
    if (snapshot !== null) {
   
   
      const currentHeight = this.myRef.current.scrollHeight;
      if (currentHeight > snapshot) {
   
   
        this.setState({
   
    message: "Scrolling down" });
      } else if (currentHeight < snapshot) {
   
   
        this.setState({
   
    message: "Scrolling up" });
      } else {
   
   
        this.setState({
   
    message: "No scrolling" });
      }
    }
  }

  render() {
   
   
    return (
      <div ref={
   
   this.myRef}>
        {
   
   this.props.children}
        <p>{
   
   this.state.message}</p>
      </div>
    );
  }
}

在上面的例子中,getSnapshotBeforeUpdate 方法计算了更新前的 DOM 高度并返回。在 componentDidUpdate 方法中,通过比较更新前后的高度,我们可以判断用户是向上滚动还是向下滚动,并更新相应的状态。

小结

生命周期函数是React组件中的一些方法,它们在组件的不同状态下被调用,可以在这些函数中实现一些特定的行为。React组件的生命周期可以分为三个阶段:

  1. 挂载阶段(Mounting):组件被创建并插入到DOM中
  2. 更新阶段(Updating):组件被重新渲染
  3. 卸载阶段(Unmounting):组件被从DOM中移除

下面是React中常用的生命周期函数:

  1. constructor(props):初始化组件的状态和属性。
  2. getDerivedStateFromProps(props, state):在组件更新前被调用。返回值将会被添加到组件的状态中。
  3. render():渲染组件。必须返回一个React元素或null。
  4. componentDidMount():组件已经被挂载到DOM中。可以在这个函数中发送请求。
  5. shouldComponentUpdate(nextProps, nextState):组件将要更新。可以在这个函数中判断是否需要更新组件。
  6. getSnapshotBeforeUpdate(prevProps, prevState):在组件更新前被调用。返回值会传递给componentDidUpdate()函数。
  7. componentDidUpdate(prevProps, prevState, snapshot):组件已经更新完毕。可以在这个函数中更新状态或者发送请求。
  8. componentWillUnmount():组件将要被卸载,可以在这个函数中清除定时器或者取消请求。
相关文章
|
4月前
|
前端开发
react生命周期的一些坑
react生命周期的一些坑
|
4月前
|
前端开发 JavaScript 开发者
【第27期】一文了解React生命周期
【第27期】一文了解React生命周期
52 0
|
25天前
|
前端开发 JavaScript
React的生命周期简介(十)
【8月更文挑战第15天】React的生命周期简介
37 2
React的生命周期简介(十)
|
10天前
|
前端开发 API UED
React组件生命周期详解
【9月更文挑战第4天】在React应用开发中,掌握组件生命周期对于管理状态和属性至关重要,并能有效提升应用性能。本文详细介绍了React组件生命周期的三个阶段:挂载、更新和卸载,并通过代码示例展示了如何避免状态更新导致的死循环及优化网络请求等问题,帮助开发者构建更高效、可维护的应用。
28 2
|
15天前
|
前端开发 JavaScript
React 组件的生命周期阶段详解
【8月更文挑战第30天】
36 2
|
15天前
|
前端开发 JavaScript
React 组件生命周期方法详解
【8月更文挑战第30天】
32 1
|
25天前
|
前端开发 JavaScript
React的生命周期演示-旧(11)
【8月更文挑战第15天】React的生命周期演示-旧(11)
25 3
|
14天前
|
前端开发 JavaScript 开发者
React生命周期方法完全指南:深入理解并高效应用每个阶段的钩子——从初始化到卸载的全方位解析
【8月更文挑战第31天】本文详细介绍了React组件生命周期方法,包括初始化、挂载、更新和卸载四个阶段的关键钩子。通过探讨每个阶段的方法,如`componentDidMount`和`componentWillUnmount`,帮助开发者在正确时机执行所需操作,提升应用性能。文章还提供了最佳实践,指导如何避免常见错误并充分利用最新钩子。
25 0
|
14天前
|
前端开发 JavaScript 开发者
React 中的生命周期方法是什么?
【8月更文挑战第31天】
31 0
|
21天前
|
前端开发 JavaScript 开发者
React 组件生命周期的详细描述
【8月更文挑战第24天】
31 0