价: ReactJS文档页面URL:https://facebook.github.io/react/docs/state-and-lifecycle.html
分配 this.timerID = setInterval 中的 timerID 只是一个变量。为什么这不是州?
答案 0 :(得分:9)
你可以让它成为状态变量,但这没有多大意义,因为状态意味着保存与UI当前状态相关的变量。此外,状态变量用于在更新时触发重新呈现(使用setState()
)。
对于要在状态中存储的计时器ID,这些都没有多大意义。换句话说,它不是状态变量,因为:
official docs实际上提到了这个:
状态包含特定于此组件的数据,该数据可能会随时间而变化。 [...]如果您不在
render()
中使用它,它不应该处于该状态。例如,您可以将计时器ID直接放在实例上。
答案 1 :(得分:2)
赋值中的timerID是this.timerID = setInterval只是一个 变量
是的,timerID
是setInterval函数返回的变量。它也是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值后,页面将重新呈现。