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是一种生命周期方法,一旦状态更新就会调用它。