react native组件的生命周期

news/2024/7/8 3:52:25

react native组件的生命周期

一、当页面第一次加载时,会依次调用:

constructor()
componentWillMount(): 这个函数调用时机是在组件创建,并初始化了状态之后,在第一次绘制  render() 之前。可以在这里做一些业务初始化操作,也可以设置组件状态。这个函数在整个生命周期中只被调用一次。
render():组件渲染
componentDidMount() :虚拟 DOM 已经构建完成,你可以在这个函数开始获取其中的元素或者子组件了。需要注意的是,RN 框架是先调用子组件的  componentDidMount(),然后调用父组件的函数。从这个函数开始,就可以和 JS 其他框架交互了,例如设置计时  setTimeout 或者  setInterval,或者发起网络请求。这个函数也是只被调用一次。这个函数之后,就进入了稳定运行状态,等待事件触发。

 

二、页面状态state更改时:

例子,点击页面组件,数字加1:

constructor(props) {
    super(props)
    console.log('_____constructor_____')
    this.state = {
         count: 0
    }
}
render() {
     console.log('___render___')
     return (
        <View>
            <Text onPress = {() =>{
                this.setState({
                  count: this.state.count+1
                })
            }}>
          点击增加
         </Text>
         <Text>{this.state.count}</Text>
        </View>
    );
}

            

这个时候生命周期会依次调用:

shouldComponentUpdate():当组件接收到新的属性和状态改变。

componentWillUpdate():如果组件状态或者属性改变,并且上面的 shouldComponentUpdate(...) 返回为 true,就会开始准更新组件

render():组件渲染

componentDidUpdate():属性和状态完成更新

 

三、属性(props)改变时:

componentWillReceiveProps():组件收到新的属性(props)

 

四、组件关闭

componentWillUnmount():组件要被从界面上移除的时候,在这个函数中,可以做一些组件相关的清理工作,例如取消计时器、网络请求等

 

注意:

shouldComponentUpdate()默认返回true,true 表示需要更新,继续走后面的更新流程。

shouldComponentUpdate() {
        console.log('_____shouldComponentUpdate_____')
        return true
    }

当返回值为false时,则不更新,直接进入等待状态。componentWillUpdate()、render()、componentDidUpdate()都不会执行

 

转载于:https://www.cnblogs.com/momozjm/p/8882985.html


http://www.niftyadmin.cn/n/593954.html

相关文章

电信网通证实台湾地震影响内地访问国际网站(12月27日)

<iframe align"top" marginwidth"0" marginheight"0" src"http://www.zealware.com/csdnblog01.html" frameborder"0" width"728" scrolling"no" height"90"></iframe>电信网通证…

java link 使用_java集合之Link的比较

第1部分 List概括先回顾一下List的框架图(01) List 是一个接口&#xff0c;它继承于Collection的接口。它代表着有序的队列。(02) AbstractList 是一个抽象类&#xff0c;它继承于AbstractCollection。AbstractList实现List接口中除size()、get(int location)之外的函数。(03) …

百度人为操纵搜索结果遭曝光 品牌总监离职

<iframe align"top" marginwidth"0" marginheight"0" src"http://www.zealware.com/csdnblog01.html" frameborder"0" width"728" scrolling"no" height"90"></iframe>百度人为操…

有空的时候请大家去给《Web性能测试实战》投票吧。

<iframe align"top" marginwidth"0" marginheight"0" src"http://www.zealware.com/csdnblog01.html" frameborder"0" width"728" scrolling"no" height"90"></iframe>请各位兄弟…

用flask编写自己的博客(1)

照着视频写代码&#xff01;因为底子原因&#xff0c;进度太慢&#xff0c;对其中的部分代码和知识点进行记录 一、设计models&#xff1a; ​ 本着简单的原则设计&#xff0c;只包函user、post、comments 三个表格&#xff0c;user为用户信息&#xff0c;post为文章列表&#…

Android之浮动小窗口

//创建创建全局变量类 1 public class MyApplication extends Application {2 3 /**4 * 创建全局变量 5 * 全局变量一般都比较倾向于创建一个单独的数据类文件&#xff0c;并使用static静态变量 6 * 7 * 这里使用了在Application中添加数据的方法实现全局变量 8 * 注意…

java全部小写_使Java字符串全部大写或全部小写。

的toUpperCase()使用默认语言环境的规则转换方法的所有字符的在该字符串为大写的toLowerCase()方法转换所有的在该字符串中的字符使用默认语言环境的规则为小写。示例import java.lang.*;public class StringDemo {public static void main(String[] args) {//将所有大写字母转…

Android利用VideoView实现VideoPlayer

在其他的平台上面可能VideoPlayer开发是一个比较有挑战性的工作&#xff0c;但是在Android上面VideoPlayer的开发&#xff0c;基本上可以做到傻瓜式啦。本文简单对VideoPlayer的开发进行简单的介绍。 在Android系统中&#xff0c;是通过MediaPalyer类播放媒体文件的&#xff08…