编号: ReactJS文档页面网址:https://facebook.github.io/react/docs/state-and-lifecycle.htmlReactJS国家和局部变量
是的timerId在分配 this.timerID = setInterval的只是一个变量。为什么这不是状态?
编号: ReactJS文档页面网址:https://facebook.github.io/react/docs/state-and-lifecycle.htmlReactJS国家和局部变量
是的timerId在分配 this.timerID = setInterval的只是一个变量。为什么这不是状态?
你可能它是一个状态变量,但这并没有多大意义,因为状态意味着保存与UI的当前状态相关的变量。此外,如果状态变量更新(如果是setState()
),则意味着触发重新渲染。
这些对于要存储在状态中的计时器ID都没有多大意义。换句话说,它不是一个状态变量,因为:
的official docs其实提到这一点:
状态包含特定于该组件可能会随时间而改变的数据。 [...]如果您在
render()
中不使用它,则不应该处于该状态。例如,您可以将计时器ID直接放在实例上。
是在的timerId分配this.timerID = setInterval的只是一个 变量
是,timerID
是setInterval功能的可变回报。这也是class Clock ...
的正常财产。
为什么这不是一个状态?
使用timerID
in state
对它没有任何好处。它只是state
的另一个地方,用于在您的课堂中存储共享变量。将其存储在state
中只会使您的state
变大并且更复杂(难以管理),因为timerID
不会发生在最终视图中。或者更简单一些,timerID
不在render
之内使用,所以我们不需要把它放在state
之内。
好了,你可以存储在状态timerID
,但这并不是一个很好的做法,你可以读取同一个文件页面 :
如果你不使用的东西在渲染()它不应该在该州。
每当您通过setState
更新状态时,render方法正在调用。所以如果这个数据不改变UI,那么调用render方法不会改变任何东西,这将是一种浪费。
这就是为什么所有的'helper'数据,比如API请求,e.t.c最好存储为组件对象密钥。
这基本上就是我刚才所说的,只是改写而已。 – Chris
谢谢。另外两个回答也分享几乎相似的想法,但你的回答是最完整和最明确的。 – Sapta