【发布时间】:2019-11-07 18:23:55
【问题描述】:
import React, { useState } from "react";
function HookCounter() {
const [count, setCount] = useState(0);
return (
<div>
<button onClick={() => setCount(count + 1)}>Count {count}</button>
</div>
);
}
export default HookCounter;
React 每次需要重新渲染时都会调用这个函数。
但是为什么不是每次都初始化状态呢?
退出函数时,变量的生命就结束了,不是吗?
但它是如何不断保存状态值的呢?
我不明白。
在useState 函数中,有什么逻辑吗?
【问题讨论】:
-
钩子不是普通的函数,它们很神奇。 useState 将值在内部存储在 react 的核心中,并在再次执行渲染函数时将更新的而不是初始的值传递回您的组件
-
初始化只完成一次。它在每次渲染上运行,但结果被忽略。您还可以传递一个函数来初始化状态,这个函数只运行一次。
const[s,setter] = useState(() => 3)。 reactjs.org/docs/hooks-reference.html#lazy-initial-state -
函数外?我没有看到在另一个组件中使用 count 。除非您通过它们,否则它仅在该组件中可用。
-
@AndyRay 并不神奇,但它们绝对不是纯粹的。该实现依赖于组件内钩子调用的相对顺序,以便在传递之间传播状态。
-
@AndyRay 你当然可以嵌套它们......否则自定义钩子是不可能的。重要的是组件内对 React 提供的钩子的调用的相对顺序对于所有渲染保持相同。这是一个非常简化的pseudo-implementation 钩子如何在幕后工作。
标签: javascript reactjs react-hooks