setState

作者: EWL | 来源:发表于2018-07-22 22:02 被阅读0次

React文档对于setState的解释和应用
setState()会对组件状态的改变进行排列然后噶欧式React该组件和它的子组件需要基于更新过后的状态进行重新渲染。这是在响应事件处理和服务器响应后对用户界面进行更新的基本方法。

要将setState()方法当成是一次请求而非一个更新组件的即时指令。为了更好的性能体验,React会将其延迟,然后一次性更新多个组件。React并不能够保证状态改变能够即刻生效。

setState()并不总是能够即刻更新组件。它可能会批量更新或者推迟更新。这使得在调用setState方法之后立刻读取this.state成为了一个潜在的陷阱。相反的,使用componentDidUpdate或者setState的回调函数其中任何一个,都可以保证在更新应用之后触发。如果你需要基于上一个状态去设置新状态,可以阅读下面提到的updater论点。

除非shouldComponentUpdate返回false,否则setState总是会导致一次新的渲染。
如果正在使用可变对象且无法在shouldComponentUpdate()中实现条件渲染逻辑,则仅在新状态与上一状态不同时调用setState(),这可以避免不必要的二次渲染。

第一个参数是带签名的updater函数:

(prevState, props) => stateChange

prevState是对上一状态的引用。它不能被直接修改。相反的,修改应该以一个基于prevState和props输入的新对象来呈现。例如,假设我们想要通过props.step来增加状态值:

this.setState((prevState, props) => {
    return {counter: prevState.counter + props.step};
});

被updater函数接收的两个值,prevState和props都能保证是最新值。updater函数的输出是与prevState浅合并的。

setState的第二个参数是一个可选的回调函数,一旦setState被完成该回调函数就会被执行,组件就会进行重新渲染。一般来说我们推荐使用componentDidUpdate来代替这样的逻辑判断。

你可以选择性传递一个对象作为第一个参数给setState而非是一个函数。

setState(stateChange[,callback])

这会将stateChange浅层合并到新状态,例如,调整购物车项目数量:

this.setState({quantity: 2})

这种形式的setState也是异步的,并且在同一个生命周期中多次调用会被一次性批量处理。举例,如果你想要在同一生命周期中多次添加一件物品,那么这就会产生相当于:

Object.assign(
  previousState,
  {quantity: state.quantity + 1},
  {quantity: state.quantity + 1},
  ...
)

后续调用会覆盖掉同一周期中上一次的调用。所以,数量只能够被增加一次。如果下一状态是取决于上一状态的,那么我们推荐使用updater函数形式来代替:

this.setState((prevState) => {
  return {quantity: prevState.quantity + 1};
});

相关文章

  • 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/qiermftx.html