javascript - 如何在同一函数中异步调用后获取更新的状态

标签 javascript reactjs react-hooks

我有这样的场景,在函数内部我更改状态,调用异步方法,然后想要使用更新后的状态。问题是状态没有改变,尽管在异步调用后运行:

function MyComponent(){
 const [values, setValues] = useState<number[]>([]);
 const updateValue = () => {
  setValues(values.push(1));
  myAsyncMethod().then(()=>{
   console.log(values); //still empty array '[ ]' !
   setValues(values.remove(1)); //no value to remove
  });
 };
 return(
  <OtherComponent values={values} updateValue={updateValue}/>
 );
}

缺少什么? 我不想使用“useRef”,因为我想在值更改时重新渲染。 有没有办法让我可以在异步调用后获取更新的状态?

最佳答案

来自您的代码块:

const updateValue = () => {
  setValue(2);
  myAsyncMethod().then(()=>{
   console.log(value); //still '1' !
  });
};

setValue 也是异步的。因此,这就是为什么您仍然获得值为 1 的原因。根据您的场景,您将获得要设置的值。您可以将其而不是状态变量传递为:

const updateValue = newValue => {
  setValue(newValue);
  myAsyncMethod().then(()=>{
   console.log(newValue);
  });
};

希望这对您有帮助。

关于javascript - 如何在同一函数中异步调用后获取更新的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60512506/

相关文章:

javascript - 使用 Javascript 和 PHP 的 24 小时倒计时器

Javascript 更改 iframe 上的 src

reactjs - 如何使用 createAsyncThunk 帮助程序分派(dispatch) AsyncThunk

javascript - 如何在react-native中从子组件(带参数)调用父函数?

javascript - 使用redux,如何避免在进行新的API调用之前渲染旧的状态数据?

javascript - 应用函数 javascript 循环额外

android - 使用 React Native 访问 Android 上的相机和 CameraRoll?

javascript - 当特定 props 元素发生更新时,React Hooks 会更新状态元素

reactjs - 使用大数组 react useState() 钩子(Hook)

javascript - 如何在时间符号中自动插入前导零