Reactjs 如何在react钩子中的状态更改后立即获取状态
大家好,设置状态后,我无法获取当前状态。我正在调用一个函数,其中我正在传递该状态,但我总是在该函数中获得默认状态。 这是我的州-Reactjs 如何在react钩子中的状态更改后立即获取状态,reactjs,typescript,Reactjs,Typescript,大家好,设置状态后,我无法获取当前状态。我正在调用一个函数,其中我正在传递该状态,但我总是在该函数中获得默认状态。 这是我的州- const [currentValue , setCurrentValue] = useState(one[0]); // where one[0] is string "Test" 这是我的onchange函数- const getTest = useCallback((newValue:string) => { setCurrentV
const [currentValue , setCurrentValue] = useState(one[0]); // where one[0] is string "Test"
这是我的onchange函数-
const getTest = useCallback((newValue:string) => {
setCurrentValue({
label:newValue,
value:newValue
});
getCurrentValue(currentValue.value);
getSortOrder()
}, [])
const getSortOrder =() => {
console.log(currentValue);
}
这是我的getSortOrder函数-
const getTest = useCallback((newValue:string) => {
setCurrentValue({
label:newValue,
value:newValue
});
getCurrentValue(currentValue.value);
getSortOrder()
}, [])
const getSortOrder =() => {
console.log(currentValue);
}
我没有在getSortOrder函数和getCurrentValue函数中获得更新状态。但是是的,如果我试图在render中控制状态,那么它会向我显示更新的状态,但在函数中它不会更新。如何在这两个函数中实现更新状态?如果我正确理解您的问题,这可能会有帮助:
const getTest = useCallback((newValue:string) => {
setCurrentValue({
label:newValue,
value:newValue
});
//try this code doing in useEffect
}, [])
useEffect(() => {
getCurrentValue(currentValue.value);
getSortOrder()
},[currentValue]); //Everytime currentValue changes it will give new state
之所以会发生这种情况,是因为“setCurrentValue”函数是一个异步函数,并且在“getCurrentValue”和“getSortOrder”函数都完成执行后状态会更新 一个简单的解决方案是将参数“newValue”传递给两个函数,如下所示:
const getTest = useCallback((newValue:string) => {
setCurrentValue({
label:newValue,
value:newValue
});
getCurrentValue(newValue);
getSortOrder(newValue)
}, [])
const getSortOrder =(newValue) => {
console.log(newValue);
}
const getTest = useCallback((newValue:string) => {
setCurrentValue({
label:newValue,
value:newValue
});
}, [])
useEffect(() => {
getCurrentValue();
getSortOrder()
},[currentValue]);
或者,您可以使用“useEffect”功能在状态值更新后触发函数,如下所示:
const getTest = useCallback((newValue:string) => {
setCurrentValue({
label:newValue,
value:newValue
});
getCurrentValue(newValue);
getSortOrder(newValue)
}, [])
const getSortOrder =(newValue) => {
console.log(newValue);
}
const getTest = useCallback((newValue:string) => {
setCurrentValue({
label:newValue,
value:newValue
});
}, [])
useEffect(() => {
getCurrentValue();
getSortOrder()
},[currentValue]);
状态更改是异步的,不能在设置后直接使用/打印值。您应该将
newValue
传递到``getCurrentValue`和getSortOrder
,这取决于您想要什么样的功能,但最好将其放入useEffect
中,并将状态值设为dependency@Jayce444我们如何使用useEffect来实现它。你能在这里放一些相关的代码吗?我们不能在setCurrentValue之后传递回调。它说应该是1个参数,但得到了2个。显然,在statehooks的情况下不能使用回调,useEffect相当于setState提供的功能(在类组件的情况下)。对不起,我将更新我的答案@anumapishrap请更新您的答案,以便我有更好的想法。ThanksConsider Useffect是一种生命周期方法,一旦状态更新就会调用它。