useState如何更新组件?

时间:2019-07-29 10:01:58

标签: reactjs

一开始我以为react组件的功能主体会以某种方式监听内部的任何变化,这就是为什么它会更新。但是然后我尝试设置一个间隔,该间隔会更改函数体内的变量,但并未更新。

一个好问题是自定义钩子是如何工作的,因为它只是一个函数,它具有一些值并返回它们,但能够更新功能组件。

所以基本上的问题是:useState如何与其父函数通信,以使其更新?

3 个答案:

答案 0 :(得分:1)

反应挂钩的两个重要规则之一是“不要在循环,条件或嵌套函数内调用挂钩”。需要遵循此规则,因为React依赖于调用挂钩的顺序来确定哪个挂钩调用属于哪个状态/组件。查找说明here

现在回答您的主要查询-您已经提到了“父函数”。自定义钩子绝不是组件的子功能。如果是这样,我们将违反钩子规则,因为在嵌套函数中调用钩子的情况将如此。自定义钩子只是独立的函数,在这里我们调用useState(或任何钩子),React只是跟踪该状态,并使用其调用顺序将其与适当的组件相关联。有关详细说明,请参见Ryan Florence谈话here

答案 1 :(得分:0)

useState返回一个包含两个元素的数组。第一个元素是当前值,第二个元素是可用于更新值的方法。使用此方法更新值会触发重新渲染。

答案 2 :(得分:0)

这是理论如何运作的。在晚年有阶级的成分。类组件具有称为setState的函数。该函数更改了组件状态,并对引擎说:“嘿,该组件已更改了其数据。请重新呈现该组件及其子树。”如今,我们有了钩子函数setState。它有点类似,但是没有setState函数,而是有setter和getter函数来实现值。调用setter时,react知道它属于确切的组件并重新渲染。它简化了,但我希望能有所帮助。