react循环setstate_react生命周期入门

什么是生命周期

生命周期函数(钩子函数)通俗的说就是在某一时刻会被自动调用执行的函数。

React的生命周期函数

7b0c383873b55062d3016593ed4e6a89.png

componentWillMount

在渲染前调用,在客户端也在服务端。

React 16.3+版本中 componentWillMount 被重命名为 UNSAFE_componentWillUpdate()

ps: 不建议在componentWillMount 中做 AJAX 调用,代码里看到只有调用一次,但是实际上可能调用 N 多次,这明显不合适。相反,若把 AJAX 放在componentDidMount,因为 componentDidMount 在第二阶段,所以绝对不会多次重复调用,这才是 AJAX 合适的位置。

componentDidMount

在第一次渲染后调用,只在客户端。之后组件已经生成了对应的DOM结构,可以通过this.getDOMNode() 来进行访问。 如果你想和其他JavaScript框架一起使用,可以在这个方法中调用setTimeout, setInterval 或者发送AJAX请求等操作(防止异步操作阻塞UI)。

使用场景

  • 该方法中可以发起异步请求,可以执行setState
  • 该方法可以使用refs获取真实dom元素,进行dom相关操作
1747cac86d6635c5dba7e47d37120946.png

componentWillReceiveProps

在组件接收到一个新的 prop (更新后)时被调用。(首次并不会触发函数)。

使用场景:

  • 在接受父组件改变后的props需要重新渲染组件时用到的比较多
  • 接受一个参数nextProps
  • 通过对比nextProps和this.props,将nextProps的state为当前组件的state,从而重新渲染组件
 componentWillReceiveProps (nextProps) {    nextProps.openNotice !== this.props.openNotice&&this.setState({        openNotice:nextProps.openNotice    }, () => {        //将state更新为nextProps,在setState的第二个参数(回调)可以打印出新的state      console.log(this.state.openNotice:nextProps)  })}

PS: React 16.3+版本中 componentWillReceiveProps被重命名 UNSAFE_componentWillReceiveProps()

shouldComponentUpdate

判断组件是否应该重新渲染,默认是true, 返回false时不会重写render

nextProps: 表示下一个props。nextState: 表示下一个state的值。
shouldComponentUpdate(nextProps, nextState)

用途:

主要用于性能优化(部分更新)唯一用于控制组件重新渲染的生命周期,由于在react中,setState以后,state发生变化,组件会进入重新渲染的流程,在这里return false可以阻止组件的更新因为react父组件的重新渲染会导致其所有子组件的重新渲染,这个时候其实我们是不需要所有子组件都跟着重新渲染的,因此需要在子组件的该生命周期中做判断

eg:

shouldComponentUpdate(nextProps, nextState) {  return nextState.someData !== this.state.someData

componentWillUpdate

在组件接收到新的 props 或者 state 但还没有 render 时被调用。在初始化时不会被调用。

PS:

  1. React 16.3+版本中 componentWillUpdate 被重命名 UNSAFE_componentWillUpdate()
  2. 不能在该函数中通过 this.setstate 再次改变 state,否则会造成无限循环。

ComponentDidUpdate

ComponentDidUpdate(nextProps, nextState)

nextProps: 表示下一个props。nextState: 表示下一个state的值。

使用场景:通过比较prevProps或prevState 与 this.props或this.state,进行业务处理,发送网络请求

注意:在处理业务或发送网络请求时,一定要做条件比较,否则容易造成死循环

componentWillUnmount

在组件从 DOM 中移除之前立刻被调用。

使用场景:清理无效 timer、取消未完成的网络请求

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值