2017-09-07 38 views

回答

1

可能它是一个状态变量,但这并没有多大意义,因为状态意味着保存与UI的当前状态相关的变量。此外,如果状态变量更新(如果是setState()),则意味着触发重新渲染。

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

  1. timerID不是以任何方式表示UI的表示形式。
  2. 更新timerID不应触发重新呈现。

official docs其实提到这一点:

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

+1

谢谢。另外两个回答也分享几乎相似的想法,但你的回答是最完整和最明确的。 – Sapta

2

是在的timerId分配this.timerID = setInterval的只是一个 变量

是,timerIDsetInterval功能的可变回报。这也是class Clock ...的正常财产。

为什么这不是一个状态?

使用timerID in state对它没有任何好处。它只是state的另一个地方,用于在您的课堂中存储共享变量。将其存储在state中只会使您的state变大并且更复杂(难以管理),因为timerID不会发生在最终视图中。或者更简单一些,timerID不在render之内使用,所以我们不需要把它放在state之内。

1

好了,你可以存储在状态timerID,但这并不是一个很好的做法,你可以读取同一个文件页面 :

如果你不使用的东西在渲染()它不应该在该州。

每当您通过setState更新状态时,render方法正在调用。所以如果这个数据不改变UI,那么调用render方法不会改变任何东西,这将是一种浪费。

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

+0

这基本上就是我刚才所说的,只是改写而已。 – Chris