【发布时间】:2020-06-18 10:13:57
【问题描述】:
我认为 React 的“useState”钩子是如何工作的非常好。 State - 是映射到某个组件的值列表,还有 useState 调用的索引,它是请求状态值索引。当 React 渲染器遇到组件时,它会将其写入到 useState 可以访问的外部引用中,因此它通过 useState 调用索引从“当前”组件的状态列表中返回状态值。 但我不知道,React 如何识别“useEffect”中的依赖关系并将其链接到实际状态,这显然是数字和字符串等普通值。这是怎么做到的?
import React from 'react'
function Component() {
const [plainString, setPlainString] = React.useState('Hello')
const [anotherPlainString, setAnotherPlainString] = React.useState('Good bye')
// update `plainString` after mount
React.useEffect(() => {
setPlainString('Updated Hello')
}, [])
// callback get triggered after `plainString` update!
// but how it links dependency to state if its just 'Hello' string?
React.useEffect(
() => {
console.log(plainString) // "Updated Hello"
},
[plainString]
)
return <h1>plainString</h1>
}
【问题讨论】:
-
提示:状态变量没有链接到组件(本身) - 钩子是。这就是为什么钩子必须始终以相同的顺序调用并且不能有条件地调用(并且不能有条件依赖)
-
@Adam 好的。但是在实施中,我建议钩子也不能重新排序。实际上,它的工作原理是一样的,我已经测试过了。
-
我的意思是说一旦安装给定组件的钩子就不能改变了。
标签: javascript reactjs