美文网首页
React 初探(七)- 生命周期

React 初探(七)- 生命周期

作者: bowen_wu | 来源:发表于2019-01-16 15:52 被阅读23次

概述

React 有一些生命周期钩子,可以让开发者在适当的时候插入自己的代码。那 React 生命周期中有哪些钩子函数呢?

demo

首先写一个简单的 demo

  1. create div


    create div
  2. mount div


    mount div
  3. update div


    update div
  4. destroy div


    destroy div

这四个状态便表示了一个 div 的整个生命周期,React 也不例外

React 生命周期

React 生命周期
上图便是创建一个组件的过程。React 生命周期 demo

何时 setState

  1. 不能在 mount 之前 setState,即不能在 constructorcomponentWillMountrendersetState
  2. 不能在 componentWillUpdatecomponentDidUpdatesetState,反复调用,栈溢出
  3. 可以在 componentDidMountcomponentWillUnmountcomponentWillReceivePropssetState

shouldComponentUpdate

shouldComponentUpdate(nextProps, nextState)

使用 shouldComponentUpdate 以让 React 知道当前状态或属性的改变是否不影响组件的输出。默认行为是在每一次状态的改变重新渲染,在大部分情况下你应该依赖于默认行为。

当接收到新属性或状态时,shouldComponentUpdate 在渲染前被调用。默认为 true。该方法并不会在初始化渲染或当使用 forceUpdate() 时被调用。

shouldComponentUpdate() 返回 false,而后 componentWillUpdaterender()componentDidUpdate 将不会被调用。

返回的参数 nextPropsnextState 是即将更新的数据,this.state 是旧的数据

shouldComponentUpdate 允许我们手动地判断是否要进行组件更新,根据组件的应用场景设置函数的合理返回值能帮我们避免不必要的更新

shouldComponentUpdate demo

在生命周期中的哪一步应该发起 AJAX 请求

需要将 AJAX 请求放到 componentDidMount 函数中执行,主要原因如下:

  • constructor 函数中不能使用 setState

  • componentWillUnmount 中无法确保在执行 render 前已经获得了异步请求的数据,componentDIdMount 不存在这个问题

  • 为了性能的需要,FIber 有了调度 render 执行顺序的能力,所以 componentWillMount 函数的执行变得不确定了

  • 无法保证 AJAX 请求在组件的更新阶段里成功返回数据,有可能当我们进行 setState 处理的时候,组件已经被销毁了

setState 的时候会调用哪些生命周期函数

shouldComponentUpdate + componentWillUpdate + render + componentDidUpdate

相关文章

  • React 初探(七)- 生命周期

    概述 React 有一些生命周期钩子,可以让开发者在适当的时候插入自己的代码。那 React 生命周期中有哪些钩子...

  • React Native初探(三)- Mac

    在React Native初探(一) - Mac和React Native初探(二)- Mac中,很简陋但是能用的...

  • 初探React生命周期

    react生命周期 挂载和卸载过程 1,组件挂载是最基本的过程,这个过程主要做组件状态的初始化. 数据更新过程 如...

  • React_生命周期

    今天我们来学习React_生命周期 生命周期分七个: 1、componentWillMount() 2、compo...

  • React概念图

    React概念图 React组件生命周期概念图 参考文档:React入门教程 组件生命周期React:组件生命周期...

  • React基础篇之组件的生命周期

    引出生命周期 react生命周期(旧) react生命周期(新) getSnapshotBeforeUpdate的...

  • React 生命周期初探

    概论 什么是生命周期 个人理解的生命周期就是一个对象从开始生成到最后销毁所经历的不同状态,React 生命周期可分...

  • React 初探

    原文地址 React 初探 [1.React 简单介绍](https://github.com/laispace/...

  • 探索React源码:Reconciler

    在探索React源码:初探React fiber[https://juejin.cn/post/703562827...

  • (React启蒙)初探React

    初探React 本文翻译自Cody Lindley的《React Enlightenmen》,已获得作者授权,这套...

网友评论

      本文标题:React 初探(七)- 生命周期

      本文链接:https://www.haomeiwen.com/subject/ihbpdqtx.html