为什么 useState 钩子调用初始化值代码两次?

Pat*_*ryk 2 reactjs react-hooks

假设我们有以下代码:

const [obj, setobj] = useState(generateInitialObj());
Run Code Online (Sandbox Code Playgroud)

为什么 generateInitialObj() 会被调用两次?我已经将日志记录添加到 generateInitialObj() 并且我刚刚注意到它。它似乎发生在组件生命周期的最开始。不过,一旦 react 从那里获得了一个值,它就会永远留在那里。无需重新获取。有任何想法吗?

Aug*_*aas 8

这是一个 JavaScript 技术。React 无法阻止generateInitialObj在每次渲染时被调用。为了解决这个问题,React 支持以下 API:

const [obj, setobj] = useState(() => generateInitialObj());
Run Code Online (Sandbox Code Playgroud)