ReactNative之state基础用法+究极体验

注:本教程针对于有过React/ReactNative开发经验的人群。

本篇文章将对state做一个究极探究。
知识点前瞻:
1.state使用、React事务(transaction)、setState机制、render刷新机制。
一:基本用法。
1.初始化state。
方式一:直接初始化(不推荐)

在class里可以直接初始化state(不推荐)

方式二:在构造函数中初始化(推荐)
constructor ( props ) {
super ( props ) ;
//设置状态
this . state = {
text : ' 123 ',
}
}
2.使用
this.state.xxx

3.改变
this . setState ( {
text : ' 456 '
} )

二:调皮的用法。setState机制讲解。
因为原理的话只可意会不可言传这里对于原理的讲解就由大家在以后的学习过程中慢慢体会。

为了阅读体验,示例只截取部分代码。
首先初始化一个state,起个名字叫text并设初始值为‘123’
constructor ( props ) {
super ( props ) ;
//设置状态
this . state = {
text : ' 123 ',
}
}

举的第一个栗子:
//方法一,始终是执行完下面的代码再更新state再执行render
this . setState ( {
text : ' 456 '
} )
for ( let i = 0 ; i < 1000 ; i ++ ) {
console . log ( ' 方法一:state值= '+ this . state . text ) ;
}

执行结果:
先输出了1000次上一次的值。然后再更改的state,再运行的render。
我尝试着循环打印了1000000次log。结果就是模拟器卡了小10分钟,但依旧是先输出了1000次上一次的值。然后再更改的state,再运行的render。

举的第二个栗子:
//方法二:先执行了setState和render再执行下面的代码
let me = this ;
setTimeout ( function (){
me . setState ( {
text : ' 456 '
} )
console . log ( ' 异步,text= '+ me . state . text ) ;
}, 0 ) ;

执行结果:
先执行了异步中的setState和render。再输出了更改后的值。

举的第三个栗子:
//方法三:不管for多少遍state赋值操作,render只执行了一次
for ( let i = 0 ; i < 1000 ; i ++ ) {
this . setState ( {
text : ' 456 '
} )
console . log ( ' 执行更新state ' ) ;
}

执行结果:
尽管运行了1000遍setState,但render却只执行了一次,说明setState这个方法真的很智能。不会傻傻的刷新一千遍render,只会选择性的进行刷新。

每个例子都用同样的render代码:
render () {
console . log ( ' 更新了render ' ) ;
return ( ......


总结:
1.在主线程中,也就是直接写的代码,跟在setState之后的代码,是只能拿到setState之前的值的。
2.在异步中,因为线程存在事务,所以跟在setState之后的代码,可以拿到setState之后的值。但是因为事务的原因,是在执行完render之后才拿到的值。
3.无论for多少遍setState,render只执行该执行的那一次。重复执行setState只会引起render执行一次。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值