【问题标题】:React state not updating after async await call异步等待调用后反应状态不更新
【发布时间】:2019-12-10 05:35:54
【问题描述】:

我正在使用 React Hooks 和 useEffect 从 API 获取数据。我需要连续打 2 个电话。如果我直接 console.log 响应,它会显示正确的响应,但是当我 console.log 状态时,它是空的并且没有更新。我做错了什么?

const [describeFields, setDescribeFields] = useState([]);

useEffect(() => {
const fetchData = async () => {
  await axios
    .all([
      axios.get("someUrl"),
      axios.get("someotherUrl")
    ])
    .then(
      axios.spread((result1, result2) => {
        console.log(result1.data.result.fields); //shows correct response
        setDescribeFields(result1.data.result.fields);
        console.log(describeFields);  //shows empty array      
      })
    );
};
fetchData();
}, []);

【问题讨论】:

标签: javascript reactjs


【解决方案1】:

如果您想在return 语句之前查看最新的更改,则它不会在此之后显示,因为 setState 是异步的,您的 console.log 在此之前运行 setState

const [describeFields, setDescribeFields] = useState([]);

useEffect(() => {
const fetchData = async () => {
  await axios
    .all([
      axios.get("someUrl")
      axios.get("someotherUrl")
    ])
    .then(
      axios.spread((result1, result2) => {
        console.log(result1.data.result.fields); //shows correct response
        setDescribeFields(result1.data.result.fields);
      })
    );
};
fetchData();
}, []);

console.log(describeFields); //Check here
return(

)


注意:useEffect 中的 [] 数组表示它只会运行一次。如果您想在变量更改时更新,请将其添加为依赖项。

这是工作示例:https://codesandbox.io/s/prod-thunder-et83o

【讨论】:

  • 是的,就是这样,谢谢。我会在 5 分钟后选择它作为解决方案。问题是我在显示数据时出错了,我认为它根本没有更新
  • 这是常见的错误,任何人都可以完成。快乐编码:-)
猜你喜欢
  • 1970-01-01
  • 2020-02-01
  • 2022-06-29
  • 2019-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
  • 2021-05-01
相关资源
最近更新 更多