ReactJS状态和局部变量

时间:2017-09-07 10:21:01

标签: reactjs

价: ReactJS文档页面URL:https://facebook.github.io/react/docs/state-and-lifecycle.html

分配 this.timerID = setInterval 中的 timerID 只是一个变量。为什么这不是

4 个答案:

答案 0 :(得分:9)

可以让它成为状态变量,但这没有多大意义,因为状态意味着保存与UI当前状态相关的变量。此外,状态变量用于在更新时触发重新呈现(使用setState())。

对于要在状态中存储的计时器ID,这些都没有多大意义。换句话说,它不是状态变量,因为:

  1. timerID不以任何方式表达UI的表示形式。
  2. 更新timerID不应触发重新渲染。
  3. official docs实际上提到了这个:

      

    状态包含特定于此组件的数据,该数据可能会随时间而变化。 [...]如果您不在render()中使用它,它不应该处于该状态。例如,您可以将计时器ID直接放在实例上。

答案 1 :(得分:2)

  

赋值中的timerID是this.timerID = setInterval只是一个   变量

是的,timerIDsetInterval函数返回的变量。它也是class Clock ...的正常属性。

  

为什么这不是一个州?

timerID中使用state不会带来任何好处。它只是state中另一个在您的类中存储共享变量的地方。将其存储在state只会使state更大,更复杂(更难管理),因为最终视图不会发生timerID。或者更简单,timerID中未使用render,因此我们无需将其放在state中。

答案 2 :(得分:1)

好吧,你可以将timerID存放在州,但这不是一个好习惯,你可以 请阅读同一文档页面:

  

如果你不在render()中使用某些东西,它就不应该处于这种状态。

每次通过setState更新状态时,都会调用render方法。因此,如果这些数据没有改变UI,那么调用渲染方法不会改变任何东西,这将是一种浪费。

这就是为什么所有的帮助'数据,例如API请求,e.t.c最好存储为组件 - 对象密钥。

答案 3 :(得分:1)

timerID不应该是状态,因为它与UI无关(重新呈现状态更改页面时)。 如果它处于状态,则在每次更改timerID值后,页面将重新呈现。