![](/img/trans.png)
[英]React hooks: new state value not reflecting in setInterval callback
[英]Passing a function as a callback to a React state created with hooks did not reflect new value of variable
当我们在上面存储 function 时,我在这里遇到了关于 ReactJS state 的一些非常奇怪的事情。
我创建了一个带有钩子的反应 state,其中包含:
由于钩子本身在 setState 期间没有回调,因此一旦 state 发生更改,我将使用此方法在 useEffect 期间切换回调。
我在 setState 期间传递的回调是打印出 state.number 和 secondNumber 值的值。 在 setState 完成后,state.number 的值应该是 4,secondNumber 应该是 15(测试我是否要在 useEffect 开始时控制台记录它)。
但是 state.callback() 将触发回调 function 仍然打印出原始数字 state.number = 2 和 secondNumber = 10。
我觉得这很奇怪,因为在 state.number 的值之后调用了回调,并且 secondNumber 发生了变化。
有人知道这里的代码会发生什么吗?
function App(){
const [state, setState] = useState({
number : 2,
callback : null
});
let secondNumber = 10;
useEffect(() => {
if (state.callback){
secondNumber = 15;
state.callback();
}
}, [state]);
const toggleButton1 = () => {
setState({
number : 4,
callback : () => {
console.log('state number',state.number);
console.log('second number', secondNumber);
}
})
}
return (
//button trigger function toggleButton1
)
}
export default App;
const toggleButton1 = () => {
setState({
number : 4,
callback : () => {
console.log('state number', state.number);
console.log('second number', secondNumber);
}
})
}
这将来自当前渲染周期的当前state 和secondNumber
值包含在存储的回调中。 稍后调用它将使用存储时的值。
只需在效果挂钩中执行您想要使用更新的 state 执行的操作。 功能组件 state 更新实际上并没有等效于基于类的组件的setState
回调参数,具有适当依赖关系的useEffect
是其等效的。
function App(){
const [state, setState] = useState({
number : 2,
callback : null
});
let secondNumber = 10;
useEffect(() => {
console.log('state number', state.number);
console.log('second number', secondNumber);
}, [state.number]);
const toggleButton1 = () => {
setState({
number : 4,
})
}
return (
//button trigger function toggleButton1
)
}
export default App;
仅供参考,按照定义,每个渲染周期secondNumber
将被重置/重新定义回10
,您可以在每个周期内对其进行变异,但每次都会重置它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.