当前位置: 首页 > 知识库问答 >
问题:

useState返回初始值而不是更新值

巫马自明
2023-03-14

我强制下面的代码在catch块中运行,它将getFoodCategoriesFailed设置为true,之后当它转到最终块时,它仍然将getFoodCategoriesFailed显示为false,这是它的初始值。有人能指出我做错了什么并帮我改正吗。

const [getFoodCategoriesFailed, setGetFoodCategoriesFailed] = useState(false);

const getCategories = async (url) => {
  const { request } = await requestor.get({ url });

  request.then((response) => {
    setFoodCategories(response);
    setGetFoodCategoriesFailed(false);
  }).catch(() => {
    setFoodCategories(undefined);
    setGetFoodCategoriesFailed(true);
  }).finally(() => {
    onFoodCategoriesRetrieved(getFoodCategoriesFailed, foodCategories?.food_categories);
  });
};

useEffect(() => {
  const url = "xyz";
  getCategories(url);
}, [foodCategories]);

共有2个答案

欧阳狐若
2023-03-14

我不是专家,所以如果这没有帮助,我很抱歉,但是...有几件事我可能会尝试:

>

类似的东西:

const getCategories = async (url) => {
  const { request } = await requestor.get({ url });
  let localFoodCategories = undefined;
  let localGetFoodCategoriesFailed = true;
  
  request.then((response) => {
    localFoodCategories = response;
    localGetFoodCategoriesFailed = false;
  }).catch(() => {
  }).finally(() => {
    setFoodCategories(localFoodCategories);
    setGetFoodCategoriesFailed(localGetFoodCategoriesFailed);
    onFoodCategoriesRetrieved(localGetFoodCategoriesFailed, localFoodCategories?.food_categories);
  });
};
颛孙兴旺
2023-03-14

useState不会同步更改

useState是同步的吗?

如果要同步使用useState,请使用下面的代码

import { useState, useRef, useEffect } from 'react';

export default function useStateCallback(initialState) {
  const [state, setState] = useState(initialState);
  const cbRef = useRef(null); // mutable ref to store current callback

  // eslint-disable-next-line no-shadow
  const setStateCallback = (state, cb) => {
    cbRef.current = cb; // store passed callback to ref
    setState(state);
  };

  useEffect(() => {
    // cb.current is `null` on initial render, so we only execute cb on state *updates*
    if (cbRef.current) {
      cbRef.current(state);
      cbRef.current = null; // reset callback after execution
    }
  }, [state]);

  return [state, setStateCallback];
}

 类似资料:
  • 问题内容: 我有一个Checkbutton和一个与之关联的对象,但是当我尝试获取的值时,我正在接收。 这是我的代码: 我为什么要得到? 问题答案: 是对对象的引用。您需要调用其方法来访问其表示的值:

  • 编辑问题以包括所需的行为、特定问题或错误,以及重现问题所需的最短代码。这将有助于其他人回答这个问题。 代码不返回值,而是返回“?”。编译时我没有遇到任何错误。请协助。 代码需要返回需要支付的剩余金额。输出代码1代码2代码3代码4

  • 我正在创建一个递归导航迷宫的程序。代码: 然而,每当我到达死胡同时,它都不会回溯。当我调试时,它表明当程序从递归或“回溯”返回时,我的起始值专注于停留在我的死胡同空间。 例如: 9是我的出发点。2是我的退出。4是我的道路。1 表示墙壁。当我到达一个死胡同时(在本例中为第 7 行,第 2 列)。我的立场是等于整个程序其余部分的死胡同空间。这是为什么呢?

  • 我试图了解异步/等待如何与promise一起工作。 据我所知,await应该是阻塞的,在上面的代码中,它似乎阻塞了返回带有原语

  • 我开始使用钩子,我遇到了一个问题。 我有一个状态: 最初设置为,它在初始渲染时正确渲染。 但问题是,我希望它的值是我使用hook在初始渲染中获取的数组的长度 但是我不知道阵列的长度,直到组件安装完毕。 所以,在这个函数中,我试图访问priceToFilter,但它返回,因为这是它的初始值。 但是,如果您在中看到,我将通过函数将设置为另一个值。但是,当发生在初始化挂载之后时,它不会获得新值,而是保持

  • 无论如何,这个公式是否可以修改为返回,例如:找到单词“哇”,并将该单词返回到单元格中,而不是true/false? 谢谢。