美文网首页
★ setState

★ setState

作者: 行走的蛋白质 | 来源:发表于2020-06-02 14:06 被阅读0次
  • 当组件的 setState 函数被调用之后,会发生什么 ?
  • 传入 setState 函数的第二个参数的作用 ?
  • React 中 setState 什么时候是同步的,什么时候是异步的?

setState 调用之后发生的事情

  • 在代码中调用setState函数之后,React 会将传入的参数对象与组件当前的状态合并,然后触发所谓的调和过程(Reconciliation)。
  • 经过调和过程,React 会以相对高效的方式根据新的状态构建 React 元素树并且着手重新渲染整个UI界面。 在 React 得到元素树之后,React 会自动计算出新的树与老树的节点差异,然后根据差异对界面进行最小化重渲染。
  • 在差异计算算法中,React 能够相对精确地知道哪些位置发生了改变以及应该如何改变,这就保证了按需更新,而不是全部重新渲染

传入 setState 函数的第二个参数的作用

  • 该函数会在 setState 函数调用完成并且组件开始重新渲染的时候被调用,我们可以用该函数来监听渲染是否完成:
this.setState({
    userName: 'protein'
}, () => {
    console.lot('setState has finished and the component has re-rendered.')
})

setState 的同步异步问题

  • setState 只是在合成事件和钩子函数中是异步的,在原生 addEventListener 绑定事件和 setTimeout 定时器中是同步执行的
  • setState 中的异步并不是说内部由异步代码实现,它本身执行的过程还是同步的,只是合成事件和钩子函数调用顺序在更新之前,导致在合成事件和钩子函数中无法立即拿到最新的 state 值从而形成了所谓的 异步,可以通过传入 setState 函数的第二个参数拿到更新后的结果,用于监听更新是否完成
    • 通过 isBatchingUpdates 判断是直接更新还是放到队列中回头再说,isBatchingUpdates 默认为 false,合成事件和钩子函数调用的时候会通过 batchedUpdates 更改 isBatchingUpdates 为 true
  • setState 的批量更新优化就是建立在这种 异步 的基础之上,在原生 addEventListener 绑定事件和 setTimeout 定时器中则不会进行批量更新

相关文章

  • react拓展

    setState() setState更新状态的2种方式 对象式的setState 函数式的setState 对象...

  • setState()状态更新函数

    理解setState的关键 setState不会立刻改变React组件中state的值; setState通过引发...

  • 08react基础-react原理

    setState()更新数据 setState()更新数据是异步的 注意:使用该语法,后面的setState不要依...

  • 『react』setState()特性

    一.setState()更新数据 由于setState()更新数据是异步的,所以后面的setState()不要依赖...

  • setState相关

    - setState相关 setState是同步执行的,但是state不一定同步更新 多次执行setState,...

  • react 中的 API

    设置状态:setState setState(object nextState[,function callbac...

  • RN 优化之一

    大组件使用setState ,分离成很小的模块。各用各的setState 把setState 的范围使用到最少。

  • React初探(二)

    探索state和setState 关于state和setState有以下几点注意: 1.调用setState方法来...

  • setState补充

    RN中setState 设置状态 setState(object nextState[,functioncallb...

  • ReactNative:踩过的那些坑

    1.this.setState is not a function 问题分析 this.setState is n...

网友评论

      本文标题:★ setState

      本文链接:https://www.haomeiwen.com/subject/dheuzhtx.html