我正在阅读有关功能更新的React Hook 文档并查看此引用:
“+”和“-”按钮使用函数形式,因为更新的值是基于之前的值
但是我看不出需要功能更新的目的是什么,它们与在计算新状态时直接使用旧状态有什么区别。
为什么 React useState Hook 的更新器函数根本需要函数式更新表单? 我们可以清楚地看到差异的示例有哪些(因此使用直接更新会导致错误)?
例如,如果我从文档中更改此示例
function Counter({initialCount}) {
const [count, setCount] = useState(initialCount);
return (
<>
Count: {count}
<button onClick={() => setCount(initialCount)}>Reset</button>
<button onClick={() => setCount(prevCount => prevCount + 1)}>+</button>
<button onClick={() => setCount(prevCount => prevCount - 1)}>-</button>
</>
);
}
count
直接更新:
function Counter({initialCount}) {
const [count, setCount] = useState(initialCount);
return (
<>
Count: {count}
<button onClick={() => setCount(initialCount)}>Reset</button>
<button onClick={() => setCount(count + 1)}>+</button>
<button onClick={() => setCount(count - 1)}>-</button>
</>
);
}
我看不出任何行为差异,也无法想象计数不会更新(或不会更新)的情况。因为每当计数发生变化时,onClick
就会调用新的闭包 for ,捕获最新的count
.