首页 > 其他分享 >React生命周期

React生命周期

时间:2022-09-05 13:56:50浏览次数:44  
标签:生命周期 dom 渲染 更新 React state 组件

React的生命周期中常用的有:

constructor,负责数据初始化。

render,将jsx转换成真实的dom节点。

componentDidMount,组件第一次渲染完成时触发。

componentDidUpdate,组件更新完成时触发。

componentWillUnmount,组件销毁和卸载时触发。

 

不常用的有:

getDerivedStateFromProps,更新state和处理回调。

shouldComponentUpdate,用于性能优化。

getSnapshotBeforeUpdate,替代了componentWillUpdate。

 

 

 

 

补充

constructor(): 完成了数据的初始化。注意:只要使用了constructor()就必须写super(),否则this指向会出错。

render(): render()函数会将jsx生成的dom插入到目标节点中。在每次组件更新时,react通过diff算法比较更新前和更新之后的dom节点,找到最小的有差异的dom位置并更新,花费最小的开销。

componentDidMount(): 组件第一次渲染完成,此时dom节点已经生成,在这里调用接口请求,返回数据后使用setState()更新数据后重新渲染。

componentDidUpdate(prevProps,prevState): 组件更新完成。每次react重新渲染之后都会进入这个生命周期,可以拿到更新之前的props和state。

componentWillUnmount(): 在这个生命周期完成组件的数据销毁和卸载,移除所有的定时器和监听。

 

getDerivedStateFromProps(nextProps,prevState): 代替老版的componentWillReceiveProps()。官方将更新state与触发回调重新分配到了componentWillReceiveProps()中,让组件整体的更新逻辑更加清晰,并且在当前生命周期中,禁止使用this.props,强制让开发者们通过比较nextProps和PrevState去保证数据的正确行为。

shouldComponentUpdate(): return true可以渲染,return false不重新渲染。

为什么会出现这个SCU生命周期?主要用于性能优化。也是唯一可以控制组件渲染的生命周期,在setState之后state发生改变组件会重新渲染,在当前生命周期内return false会阻止组件的更新。因为react中父组件重新渲染导致子组件也重新渲染,这时在子组件的当前生命周期内做判断是否真的需要重新渲染。

getSnapshotBeforeUpdate(prevProps,prevState): 代替componentWillUpdate(),核心区别在于getSnapshotBeforeUpdate()中读取到的dom元素状态是可以保证和componentDidUpdate()中的一致。

标签:生命周期,dom,渲染,更新,React,state,组件
From: https://www.cnblogs.com/yueyiviolet/p/16657857.html

相关文章

  • vue3——shallowReactive 与 shallowRef
    shallowReactive:只处理对象最外层属性的响应式(浅响应式)。shallowRef:只处理基本数据类型的响应式,不进行对象的响应式处理。什么时候使用?如果有一个对象数据,结......
  • vue3——生命周期
    vue2.x的生命周期:  Vue3.0中可以继续使用Vue2.x中的生命周期钩子,但有有两个被更名:beforeDestroy改名为beforeUnmountdestroyed改名为unmountedVue3.0也提......
  • 生命周期函数(面试)
    生命周期函数 beforeCreate()created()beforeMount()Mounted()beforeUpdate()Updated()beforeDestroy()destroyed()//......
  • 使用 fetch + React.js 调用 REST API
    JSON:PlaceholderJSON:Placeholder(https://jsonplaceholder.typicode.com/)是一个用于测试的RESTAPI网站。以下使用RxJS6+React.js调用该网站的RESTAPI,......
  • Vue的钩子函数(路由守卫,keep-alive,生命周期)
    说到Vue的钩子函数,可能很多人只停留在一些很简单常用的钩子(created,mounted),而且对于里面的区别,什么时候该用什么钩子,并没有仔细的去研究过生命周期钩子:这一比较简单但......
  • react快捷键
    rcc+tab键:用ES6模块系统创建一个React组件类importReact,{Component}from'react';classTestextendsComponent{render(){return(<......
  • React.js VS Solid.js,作为初学者,你应该学习哪个?
    React.jsVSSolid.js,作为初学者,你应该学习哪个?作为初学者,哪个框架对您的开发之旅最有帮助?作为第一次接触javascript前端框架的初学者,您可能想知道一些事情,例如,哪个最......
  • Rethink React:它仍然是一个好的库吗?
    RethinkReact:它仍然是一个好的库吗?Photoby约书亚阿拉贡on不飞溅大约4年前,我开始将React作为我前端开发的首选。然而,时代在变。更好的东西已经出来了……......
  • ReactJS 与 NextJS:下一个项目应该使用哪一个?
    ReactJS与NextJS:下一个项目应该使用哪一个?当我们考虑下一个项目时,我们必须决定我们将使用什么技术堆栈.使用越来越普遍JavaScript在你的项目中。但不仅是普通的Ja......
  • 你应该使用受控组件来处理 React 中的密码吗?
    你应该使用受控组件来处理React中的密码吗?Photoby丹·纳尔逊on不飞溅我最近正在为一个客户开发一个项目,其中包括身份验证和登录页面。当我去设置用户名和密码的......