React useState 会在开发工具中更新,但不会在控制台中更新
React useState does update in dev tools but not in the console
嘿我有这个功能
const [mouseIsDown, setMouseDown] = useState(true);
function handleMouseUp() {
console.log('mouseUp')
console.log(mouseIsDown)
setMouseDown(false);
setInterval(() => {
console.log(mouseIsDown)
}, 1000)
}
当它被触发时,它会记录:
- mouseUp
- true
- true
- true
- true
- true
...
但是反应开发工具显示 mouseIsDown 实际上是错误的,但是当我在一个时间间隔内记录它的值时,当我设置 [=20= 的值时它仍然记录 true ]mouseIsDown 到 false.
我不知道为什么会这样,欢迎任何帮助:D
原因是这一行
setInterval(() => {
console.log(mouseIsDown)
}, 1000)
当你这样使用间隔时,函数内部就像是当前状态的“快照”。这就是为什么你总是得到起始 mouseIsDown
值。
为了解决这个问题,你需要使用useRef
作为参考值,所以这将保存间隔内的当前状态。
新代码:
const [mouseIsDown, setMouseDown] = useState(true);
const mouseIsDownRef = useRef();
mouseIsDownRef.current = mouseIsDown; //this will set the current value
function handleMouseUp() {
console.log('mouseUp')
console.log(mouseIsDown)
setMouseDown(false);
setInterval(() => {
console.log(mouseIsDownRef?.current)
}, 1000)
}
嘿我有这个功能
const [mouseIsDown, setMouseDown] = useState(true);
function handleMouseUp() {
console.log('mouseUp')
console.log(mouseIsDown)
setMouseDown(false);
setInterval(() => {
console.log(mouseIsDown)
}, 1000)
}
当它被触发时,它会记录:
- mouseUp
- true
- true
- true
- true
- true
...
但是反应开发工具显示 mouseIsDown 实际上是错误的,但是当我在一个时间间隔内记录它的值时,当我设置 [=20= 的值时它仍然记录 true ]mouseIsDown 到 false.
我不知道为什么会这样,欢迎任何帮助:D
原因是这一行
setInterval(() => {
console.log(mouseIsDown)
}, 1000)
当你这样使用间隔时,函数内部就像是当前状态的“快照”。这就是为什么你总是得到起始 mouseIsDown
值。
为了解决这个问题,你需要使用useRef
作为参考值,所以这将保存间隔内的当前状态。
新代码:
const [mouseIsDown, setMouseDown] = useState(true);
const mouseIsDownRef = useRef();
mouseIsDownRef.current = mouseIsDown; //this will set the current value
function handleMouseUp() {
console.log('mouseUp')
console.log(mouseIsDown)
setMouseDown(false);
setInterval(() => {
console.log(mouseIsDownRef?.current)
}, 1000)
}