javascript - 在 React 中运行 useEffect 后,状态数组未更新

标签 javascript json reactjs asynchronous async-await

我对 React.js 非常陌生。我正在尝试更改处于使用钩子(Hook)状态的变量recepies。下面是我的代码片段:

import React, { useState, useEffect } from 'react';
import './App.css';

function App() {

const [recepies, setRecepies] = useState([]);

useEffect(()=>{getRecepies()}, []);

//const example = Some valid API URL


  const getRecepies = async () =>{
    const response = await fetch(example);
    const data = await response.json();

    //data.hits is an array of 10 objects
     setRecepies(data.hits);

     console.log(recepies);
    // prints nothing

  }

  return (  
    <div className="App">
    </div>
  );
}

export default App;

问题是 setRecepies 没有更新 recepies 状态。这是为什么?data.hits 是一个有效的数组,其中包含我使用 API 获取的 10 个对象。

最佳答案

recepies 是本地const。它永远不会改变,这也不是 setRecepies 想要做的。将日志语句放在您放置的位置只能注销 recepies 等于创建 getRecepies 时的内容。

setRecepies 的目的是告诉 React 重新渲染组件。当第二次渲染发生时,将创建一个新的本地 const 来获取新值。此变量对第二次渲染上创建的任何内容都可见,但对第一次渲染上创建的内容不可见。因此,如果您想查看新值,请将日志语句放入组件的主体中,以便您可以看到它重新呈现的值。

const [recepies, setRecepies] = useState([]);
console.log('rendering with', recepies);

关于javascript - 在 React 中运行 useEffect 后,状态数组未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61480758/

相关文章:

javascript - 如何使用 HTML/CSS/JS 以编程方式禁用或隐藏滚动到顶部按钮? (三星互联网浏览器)

javascript - 监控 Node.js 进程中的最大内存消耗

javascript - 即使父状态更新后,子无状态功能组件也不会更新

javascript - React v16.5.2 - 之后无条件屏幕刷新引发弹出消息

jquery - ExpressJS jQuery ajax Post 不返回任何内容

node.js - 类型错误 : Cannot read property 'list' of undefined of balanceTransactions

javascript - Access-Control-Allow-Methods 和 Microsoft Edge,适用于 Firefox 和 Chrome

javascript - 包装 float 元素后最小化行,同时最小化宽度

java - 部署在 JBoss + Linux 上的 Web 应用程序出现 Jackson jar 冲突

c# - 将对象从大型 JSON 文件转换为 .NET 中对象的最快方法