我们并不能直接通过修改state的值来让界面发生更新:
因为我们修改了state之后,希望React根据最新的State来重新渲染界面,但是这种方式的修改React并不知道数据发生了变化;
React并没有实现类似于Vue2中的Object.defineProperty或者Vue3中的Proxy的方式来监听数据的变化;
必须通过setState的方法,来告知React数据已经发生了变化;
在组件开发中,并没有实现setState的方法,为什么可以调用呢?
setState方法是从Component中继承过来的。
setState是异步更新的
可以显著的提升性能:
如果每次调用setState都进行一次更新,那么意味着render函数会被频繁调用,界面重新渲染,这样效率是很低的;
最好的方法应该是获取到多个更新,之后进行批量更新;
如果同步更新了state,但是还没有执行render函数,那么state和props将不能保持同步;
state和props不能保持一致性,会在开发过程中产生很多的问题;
获取异步更新后的数据
setState(更新的state,回调函数);
setState执行之后会执行render函数,会触发componentDidUpdate函数,在其中可以获取更新后的数据(先执行生命周期函数,再执行回调)。
setState同步更新的情况
使用定时器,将setState放入到定时器中执行。
setTimeout(()=>{
this.setState({
counter:this.state.counter