Answers:
显然将重新分配给其他原始值
并不是的。重新呈现组件后,将再次执行该函数,从而创建新的作用域,创建新的count
变量,该变量与先前的变量无关。
例:
let _state;
let _initialized = false;
function useState(initialValue) {
if (!_initialized) {
_state = initialValue;
_initialized = true;
}
return [_state, v => _state = v];
}
function Component() {
const [count, setCount] = useState(0);
console.log(count);
setCount(count + 1);
}
Component();
Component(); // in reality `setCount` somehow triggers a rerender, calling Component again
Component(); // another rerender
注意:挂钩更为复杂,实际上并未像这样实现。这只是为了演示类似的行为。
调用setCount之后,将重新呈现组件,并且对useState的新调用将返回新值。关键是计数是不变的。所以这里没有错字。
从技术上讲,它是每个渲染的新变量。
在这里,我发现const令人沮丧,因为count需要更改,因此
let [count, setCount] = useState(0)
// simply can't use ++ on either side of count increment given we declare as const [count, setCount]
// instead declaration of var or let [count, setCount] allows simpler code
const increment = () => {
setCount(count++); //const cannot do this only let or var
};