react新旧生命周期的区别是什么

react新旧生命周期的区别:1、新生命周期中去掉了三个will钩子,分别为componentWillMount、componentWillReceiveProps、componentWillUpdate;2、新生命周期中新增了两个钩子,分别为getDerivedStateFromProps(从props中得到衍生的state)和getSnapshotBeforeUpdate。

react新旧生命周期的区别是什么

本教程操作环境:Windows7系统、react18版、Dell G3电脑。

react在版本16.3前后存在两套生命周期,16.3之前为旧版,之后则是新版,虽有新旧之分,但主体上大同小异。

React生命周期(旧)

1.png

值得强调的是:componentWillReceiveProps函数在props第一次传进来时不会调用,只有第二次后(包括第二次)传入props时,才会调用

shouldComponentUpdate像一个阀门,需要一个返回值(true or false)来确定本次更新的状态是不是需要重新render

React生命周期(新)

2.png

react新旧生命周期的区别

新的生命周期去掉了三个will钩子,分别是:componentWillMount、componentWillReceiveProps、componentWillUpdate

新的生命周期新增了两个钩子,分别是:

1、getDerivedStateFromProps:从props中得到衍生的state

接受两个参数:props,state    

返回一个状态对象或者null,用来修改state的值。

使用场景:若state的值在任何时候都取决于props,那么可以使用getDerivedStateFromProps

2、getSnapshotBeforeUpdate:在更新前拿到快照(可以拿到更新前的数据)

在更新DOM之前调用

返回一个对象或者null,返回值传递给componentDidUpdate

componentDidUpdate():更新DOM之后调用

接受三个参数:preProps,preState,snapshotValue

使用案例:

固定高度的p,定时新增一行,实现在新增的时候,使目前观看的行高度不变。

nbsp;html>4_getSnapShotBeforeUpdate的使用场景.list{width: 200px;height: 150px;background-color: skyblue;overflow: auto;}.news{height: 30px;}
 class NewsList extends React.Component{ state = {newsArr:[]} componentDidMount(){setInterval(() => {//获取原状态const {newsArr} = this.state//模拟一条新闻const news = '新闻'+ (newsArr.length+1)//更新状态this.setState({newsArr:[news,...newsArr]})}, 1000);} getSnapshotBeforeUpdate(){return this.refs.list.scrollHeight} componentDidUpdate(preProps,preState,height){this.refs.list.scrollTop += this.refs.list.scrollHeight - height} render(){return(
{this.state.newsArr.map((n,index)=>{return
{n}})})}}ReactDOM.render(,document.getElementById('test'))

登录后复制

说明:

在React v16.3中,迎来了新的生命周期改动。旧的生命周期也在使用,不过在控制台上可以看到弃用警告了。并且提示有三个生命周期钩子将会被弃用,尽量不要使用。再或者可以在其前边加前缀 UNSAFE_。

【相关推荐:Redis视频教程】

以上就是react新旧生命周期的区别是什么的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2927980.html

(0)
上一篇 2025年3月11日 19:30:40
下一篇 2025年3月6日 04:22:07

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • react有哪些插件

    react插件有:1、Redux,提供可预测化的状态管理;2、MobX,通过函数响应式编程使得状态管理变得简单和可扩展;3、Redux Thunk,Redux的异步处理中间件;4、Dva,一个基于redux和redux-saga的数据流方案…

    2025年3月11日
    200
  • vue与react属于什么框架

    vue与react属于JavaScript框架。vue是一套用于构建用户界面的渐进式JavaScript框架,Vue的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。react是一个用来构建用户界面的JavaScrip…

    2025年3月11日
    200
  • react组件首字母必须大写吗

    react组件首字母必须大写;因为React根据首字母是否大写来区分是react组件还是dom元素。React中使用JSX语法,但浏览器无法识别JSX语法,需通过babel对JSX语法进行转义;而如果组件的首字母为小写时,其会被认定为原生D…

    2025年3月11日 编程技术
    200
  • react用什么ui组件库

    react可用ui组件库有:1、Material-UI,有用于布局、表单、导航、数据显示和许多其他小部件的组件;2、Ant Design,有60多个组件,带有可预测的静态类型;3、Blueprint,有40多个组件;4、React Boot…

    2025年3月11日 编程技术
    200
  • react为什么要用合成事件

    react使用合成事件主要有三个目的:1、进行浏览器兼容,实现更好的跨平台;React提供的合成事件可用来抹平不同浏览器事件对象之间的差异,将不同平台事件模拟合成事件。2、避免垃圾回收;React事件对象不会被释放掉,而是存放进一个数组中,…

    2025年3月11日 编程技术
    200
  • react.js是用es6写的吗

    react.js是用es6写的,可以用Babel转译为ES5,也可以用Babel转译为JavaScript的JSX;由于React的设计思想极其独特,属于革命性创新,性能出众,代码逻辑却非常简单。使用ES6来创建组件的语法更加简洁,这种语法…

    2025年3月11日
    200
  • react是不是Spa

    react是Spa模式,即组件嵌套,其主要的传参方式有:1、在挂载的地方给组件传参;2、父子传参,即用props或ref方式传参;3、子父传参,即子组件通过触发父组件的方法来改变父组件的状态;4、兄弟传参,即通过改变公有组件的状态进而改变子…

    2025年3月11日
    200
  • ie无法识别react怎么办

    ie无法识别react的解决办法:1、安装“react-app-polyfill”,并在“src/main.js”中引入;2、在“babel.config.js”中配置参数;3、在“vue.config.js”中配置“transpileDe…

    2025年3月11日 编程技术
    200
  • react更新state方法有哪些

    react更新state方法有:1、通过key变化子组件,代码如“”;2、利用ref父组件调用子组件函数;3、通过父级给子级传数据,子级只负责渲染。 本教程操作环境:Windows7系统、react17.0.1版、Dell G3电脑。 re…

    2025年3月11日
    200
  • react axios请求拦截怎么实现

    react axios请求拦截的实现方法:1、下载axios;2、在src目录下创建一个utils文件夹用于存放公用js;3、在utils目录下创建http.js文件;4、创建axios实例;5、添加请求拦截器;6、判断cookie有没有存…

    2025年3月11日
    200

发表回复

登录后才能评论