一、不可变值?
二、是异步还是同步?
三、可能会被合并?
一: 不可变值?
1、 操作常量
上图中不能在setState前操作 this.state.count ++ 然后再赋值!
2、操作数组
扩展:
1)会改变原数组的api:
a、push(): 向后添加一个值,返回数组长度
b、pop():删除最后一个值,返回最后一个值
c、shift(): 删除数组第一个值,返回数组第一个值
d、splice():添加/删除项目, 返回删除的项目【数组】
2)不改变原数组的api
a、concat():追加 [...this.state.list2, 100]
b、slice(): 截取 可以用来深拷贝
c、filter():筛选
d、map():遍历
3、操作对象
二、是异步还是同步?---【视情况而定】
一、异步情况
在react生命周期、方法中直接setState({}) 异步滴、如上图console.log()是获取不大新数据, 那如何获取呢? 【联想Vue中$nextTick()】 react 可以传第二个参数回调函数 ,如下图:
二、同步情况
1) setTimeout 中 setState 是同步的
2)自己定义的 DOM 事件,setState 是同步的
三、可能会被合并?
1、传入对象,会被合并(类似 Object.assign )。执行结果只一次 +1
2、 传入函数,不会被合并。执行结果是 +3
四、eg:
五、batchUpdata机制
1)哪些能命中batchUpdata机制
a): 生命周期(和它调用的函数)
b):注册的事件(和它调用的函数)
2)哪些不能命中batchUpdata机制
a)setTimeout setInterval等
b)自定义的DOM事件