立即状态更新后尝试获取状态值
Trying to get the state value after immediate state update
我已经用 usestate
声明了一个变量,如下所示
const [currentStepNumber, setCurrentStepNumber] = useState(0);
然后我在点击移动功能时更新状态,如下所示
const handleMove = () => {
setCurrentStepNumber(currentStepNumber + 1);
const { label } = Object.values(PROJECT_PHASE).find(s => s.stepNumber === currentStepNumber);
const projectPhaseID = projectPhaseData.projectPhases.find(a => a.name === label).id;
console.log(currentStepNumber);
// need to do API call as well in move function
};
并且 currentStepNumber
仍然显示 0
而不是 1
并且我无法使用计时器来触发和更新值。还有其他方法可以实现吗?
我只需要在移动功能中更新currentStepNumber
。
也许可以试试useEffect
:
useEffect(() => {
const postStepData = async () => {
try {
// call the api
const response = await postDataPromise({...data, currentStepNumber});
setCurrentStepNumber(0);
setSomeOtherState(false);
} catch (e) {
console.log(e)
}
}
const { label } = Object.values(PROJECT_PHASE).find(s => s.stepNumber === currentStepNumber);
const projectPhaseID = projectPhaseData.projectPhases.find(a => a.name === label).id;
console.log(currentStepNumber);
/*
* as an example only call api on step 4
*/
if (currentStepNumber === 4) {
void postStepData();
}
}, [currentStepNumber])
const handleMove = () => setCurrentStepNumber(currentStepNumber + 1);
参考:
您应该在 React's useEffect
中使用新的 currentStepNumber
:
const MyComponent = () => {
const [currentStepNumber, setCurrentStepNumber] = useState(0);
const handleMove = () => {
setCurrentStepNumber(currentStepNumber + 1);
};
useEffect(() => {
const { label } = Object.values(PROJECT_PHASE).find(s => s.stepNumber === currentStepNumber);
const projectPhaseID = projectPhaseData.projectPhases.find(a => a.name === label).id;
console.log(currentStepNumber);
}, [currentStepNumber])
return (
<>{/* some jsx */}</>
)
}
我已经用 usestate
声明了一个变量,如下所示
const [currentStepNumber, setCurrentStepNumber] = useState(0);
然后我在点击移动功能时更新状态,如下所示
const handleMove = () => {
setCurrentStepNumber(currentStepNumber + 1);
const { label } = Object.values(PROJECT_PHASE).find(s => s.stepNumber === currentStepNumber);
const projectPhaseID = projectPhaseData.projectPhases.find(a => a.name === label).id;
console.log(currentStepNumber);
// need to do API call as well in move function
};
并且 currentStepNumber
仍然显示 0
而不是 1
并且我无法使用计时器来触发和更新值。还有其他方法可以实现吗?
我只需要在移动功能中更新currentStepNumber
。
也许可以试试useEffect
:
useEffect(() => {
const postStepData = async () => {
try {
// call the api
const response = await postDataPromise({...data, currentStepNumber});
setCurrentStepNumber(0);
setSomeOtherState(false);
} catch (e) {
console.log(e)
}
}
const { label } = Object.values(PROJECT_PHASE).find(s => s.stepNumber === currentStepNumber);
const projectPhaseID = projectPhaseData.projectPhases.find(a => a.name === label).id;
console.log(currentStepNumber);
/*
* as an example only call api on step 4
*/
if (currentStepNumber === 4) {
void postStepData();
}
}, [currentStepNumber])
const handleMove = () => setCurrentStepNumber(currentStepNumber + 1);
参考:
您应该在 React's useEffect
中使用新的 currentStepNumber
:
const MyComponent = () => {
const [currentStepNumber, setCurrentStepNumber] = useState(0);
const handleMove = () => {
setCurrentStepNumber(currentStepNumber + 1);
};
useEffect(() => {
const { label } = Object.values(PROJECT_PHASE).find(s => s.stepNumber === currentStepNumber);
const projectPhaseID = projectPhaseData.projectPhases.find(a => a.name === label).id;
console.log(currentStepNumber);
}, [currentStepNumber])
return (
<>{/* some jsx */}</>
)
}