繁体   English   中英

异步等待调用后,React状态不会更新

[英]React state not updating after async await call

我正在使用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();
}, []);

如果你想在return语句之前只看到控制台日志,那么它就不会在那之后显示,因为setState是async你的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM