【发布时间】:2020-09-02 15:23:54
【问题描述】:
我正在学习 ReactJS,我了解函数式编程的好处。但是,我有点担心实际的 useState 方法。如果我们假设一个变量会被改变,那么为什么首先声明它为 const 呢?
我发现我可以简单地使用let number = 4;,然后像这样<p>{number}</p> 渲染它。但是,我不能做的是仅通过更改它来自动重新渲染它,例如使用像 <p onClick={() => ++number }></p> 这样的 onClick 事件。为什么会这样?是否有我遗漏的特定原因为什么它是按原样实施的?我的意思是为什么开发人员决定如果值需要在更改时重新渲染,那么它必须是在 useState 功能的帮助下声明的 const 值?
我问这个是因为我怀疑我错过了这背后的一些好处,我想了解它们。
【问题讨论】:
-
因为如果你只是增加一个局部变量,React 怎么知道应该更新虚拟 DOM,然后将更改应用到真实页面?我建议观看例如youtube.com/watch?v=AdNJ3fydeao 更好地了解正在发生的事情。
-
但是我不能做的是通过更改它来自动重新渲染它因为单独的重新分配在 JS 中不会产生副作用(几乎在所有情况下)。如果在 JS 中无法实现特定功能,那么在 React/JSX 中也不可能,没有新的运算符/语法。
-
OP,你写的是类组件还是函数组件?如果没有
useState,必须具有 flat out 状态的功能组件将无法工作,因为该组件每次重新渲染时都会重新生成其状态。函数组件中的useState不会创建内部状态,而是对外部状态的内部引用。这就像其他函数式语言中的IORef。 IIRC 它启用了“全局”状态,同时还确保了原子性。这有点像使用redux而不使用redux。
标签: reactjs functional-programming