React-17:组件的生命周期

简介: React-17:组件的生命周期

卸载组件

 ReactDOM.unmountComponentAtNode(document.querySelector('.test'));

 

组件挂载完毕

componentDidMount() {
    this.timer = setInterval(() => {
        let {opacity} = this.state;
        opacity = opacity - 0.1;
        if (opacity <= 0) opacity = 1;
        this.setState({opacity:opacity})
    },200)
}

循环定时器

this.timer = setInterval(() => {
    let {opacity} = this.state;
    opacity = opacity - 0.1;
    if (opacity <= 0) opacity = 1;
    this.setState({opacity:opacity})
},200)

组件挂载流程

  1. 构造器
  2. 将要挂载
  3. render
  4. 挂载完毕

image.png

setState更新流程

image.png

forceUpdate流程

image.png

父组件render流程

image.png

组件的生命周期(旧)

image.png

在新版本中除了componentWillUnmount之外,其余都需要加上UNSAFE_

image.png

组件的生命周期(新)

image.png

新旧生命周期的区别在哪里?

  • 在新的生命周期中,废弃了旧版本的3个带will的钩子,新提出了2个钩子。

getDerivedStateFromProps

  • 这个函数前面应加static,因为是静态的。
  • 通过这个钩子修改的state,state任何时候都取决于props,其他的函数无法进行修改。
  • 只要这个钩子拦着,所有的状态都得听props的。

getSnapshotBeforeUpdate与componentDidUpdate协同

image.png

getSnapshotBeforeUpdate的使用场景

需求:制作新闻滚动盒子,新渲染的新闻始终在上面,滚动条停在一个位置,这个位置的新闻固定不动展示给用户。

  • 首先明确两个概念:scroolHeight指的是当前滚动盒子的总高度,scrollTop指的是从盒子的最底部出发,向上跳多少高度。
class NewsList extends React.Component {
    state = { newsArr: [] };
    componentDidMount() {
        setInterval(() => {
            const { newsArr } = this.state;
            const news = "新闻" + (newsArr.length + 1);
            this.setState({ newsArr: [news, ...newsArr] });
        }, 900)
    }
    getSnapshotBeforeUpdate() {
        // 返回当前list盒子的高度
        return this.refs.list.scrollHeight;
    }
    componentDidUpdate(preProps,preState,height) {
        this.refs.list.scrollTop += this.refs.list.scrollHeight - height;
    }
    render() {
        return (
            <div className="list" ref="list">
                {
                    this.state.newsArr.map((value,index) => {
                        return (
                            <div key={index} className="news">{value}</div>
                        )
                    })
                }
            </div>
        )
    }
}
ReactDOM.render(<NewsList />, document.querySelector('.test'));

总结:组件的声明周期

  • 组件的生命周期,关键还是看懂新的组件生命周期那张图里的流程顺序。
相关文章
|
4月前
|
资源调度 前端开发 JavaScript
React 的antd-mobile 组件库,嵌套路由
React 的antd-mobile 组件库,嵌套路由
45 0
|
1月前
|
前端开发 JavaScript
React生命周期方法在实际开发中的应用场景有哪些?
【4月更文挑战第6天】 React 生命周期方法应用于数据获取、订阅管理、渲染逻辑处理、用户交互响应、性能优化、资源清理、强制更新、错误处理、动画实现、代码分割、服务端渲染、路由处理、依赖注入和集成第三方库。它们帮助控制组件行为和性能,但现代开发推荐使用Hooks替代部分生命周期方法。
16 0
|
1月前
|
前端开发 JavaScript
react生命周期函数
react生命周期函数
|
3月前
|
存储 前端开发 中间件
React组件间的通信
React组件间的通信
18 1
|
3月前
|
前端开发 应用服务中间件 数据库
react服务端组件
react服务端组件
21 0
|
3月前
|
前端开发 JavaScript
快速上手React:从概述到组件与事件处理
快速上手React:从概述到组件与事件处理
|
4月前
|
前端开发
React旧有生命周期和新生命周期的解析
React旧有生命周期和新生命周期的解析
30 0
React旧有生命周期和新生命周期的解析
|
4月前
|
前端开发 JavaScript API
React组件生命周期
React组件生命周期
76 1
|
4月前
|
资源调度 前端开发 JavaScript
React组件
React组件
42 0
|
4月前
|
存储 前端开发 JavaScript
探索 React Hooks 的世界:如何构建出色的组件(下)
探索 React Hooks 的世界:如何构建出色的组件(下)
探索 React Hooks 的世界:如何构建出色的组件(下)