javascript - Reactjs 版本 @17.0.1 中的 useEffect()
问题描述
我正在开发一个 MERN 应用程序。在一个组件中,我需要请求一个 api。我使用axios 并在 useEffect 中使用它,然后我使用 setState 将状态设置为我从 api 获得的响应。但是状态没有更新。我看到了一些 youtube 教程,但他们正在执行相同的代码并更新状态。这是因为我正在使用新版本的react @17.0.1 。
最后我该如何解决这个问题......?需要帮助。
反应应用程序内的posts.js文件-
import React, { useEffect, useState } from 'react';
import axios from 'axios';
const Posts = () => {
const [posts, setPosts] = useState([]);
useEffect(async () => {
const res = await axios.get('http://localhost:5000/posts');
console.log(res.data); // res.data is a array of objects
setPosts(res.data); // this is not working...
}, []);
return (
<div>
{posts.forEach((post) => {
<ul>
<li>{post.username}</li>
<li>{post.content}</li>
</ul>;
})}
</div>
);
};
export default Posts;
解决方案
我希望您在principle
这里了解使用 map 方法的基础知识,
一般来说(for each)
不会返回任何东西。这意味着循环原始数组的数据在循环后将无法重用
但是map
方法返回另一个数组
你可以在这里阅读Map vs foreach
所以你现在做的是
{posts.forEach((post) => {
<ul>
<li>{post.username}</li>
<li>{post.content}</li>
</ul>;
})}
这种语法实际上是循环undefined
. 这不会返回任何东西。
如果你想循环你需要使用map
方法
{posts.map((post) => {
return <div>.....</div>;
})}
推荐阅读
- python - 在 python 中将文件转换为字典时遇到问题
- kotlin - 写入文件时如何在 Spring Webflux 中等待嵌套 Mono 对象的结果
- javascript - 如果 div 值等于添加类
- c - 尽管拥有所有必需的软件包,但无法在 Fedora 上使用 Hello World 示例编译 GTK4
- ios - SiwftUI Preview 不适用于 MacOS 构建,而它适用于 iOS 构建
- amazon-elastic-beanstalk - 使用 python 3.7 部署 Flask 应用程序
- python - 定义函数时如何使用输入函数
- typescript - Visual Studio 抱怨 tsc 和 eslint 没有的 typescript 错误
- recovery - 数据库恢复 UNDO 阶段中的补偿日志记录 (CLR)
- hibernate - 如果集合被重新初始化,Hibernate 会触发删除语句