javascript - 反应:无法将 useState 设置为对象数组。控制台日志显示未定义
问题描述
我正在使用 react 和 mongoose/mongo 数据库。在页面加载时,我执行 API 调用并接收一组对象(它们是带有标题、描述等的“帖子”)。我正在尝试映射数据以在单独的卡片上动态显示帖子信息。我可以从 API 调用中获取数据,但是当我尝试将状态更改为对象数组并控制台记录它时,我得到未定义。
附上代码和结果的照片:
为什么 usestate 不接受数据中的状态变化?附上我的代码:
import React, { useState, useEffect } from 'react'
import API from "../utils/API"
const Home = () => {
const [PostObject, setPosts] = useState({
title: "",
description: "",
image: ""
})
const [PostList, setList] = useState()
useEffect(() => {
retrievePosts()
}, [])
const handleInputChange = (e) => {
e.preventDefault()
setPosts({ ...PostObject, [e.target.name]: e.target.value })
}
const createPost = (e) => {
e.preventDefault()
setPosts({ ...PostObject, title: "", description: "", image: "" })
API.addPost(PostObject)
.then(retrievePosts())
}
const retrievePosts = () => {
API.getPost()
.then(res => {
console.log(res.data);
setList(res.data)
console.log(PostList);
})
}
解决方案
为什么 usestate 不接受数据中的状态变化?附上我的代码:
因为您附加了一个空的依赖数组,useEffect
如下所示:
useEffect(() => {
retrievePosts()
}, [])
如果你传递一个空的依赖数组,这个 useEffect 只会被调用一次。如果要useEffect
在每次数据更改后运行,则必须将数据传递给依赖数组:
useEffect(() => {
retrievePosts()
}, [data /*i.e PostList*/])
但是,请注意不要无限次地重新渲染组件。您可以检查React-Query和SWR等库
还有一件事:
我可以从 API 调用中获取数据,但是当我尝试将状态更改为对象数组并控制台记录它时,我得到未定义。
推荐阅读
- python - Python:FileNotFoundError:文件 b'fleet.csv' 不存在
- react-select - 如何在使用 react-select 更改选项顺序时控制焦点选项
- javascript - JS如何在没有用户输入的情况下使Chrome自动填充注入值
- javascript - 使用 React-static 创建站点时出现错误找不到模块“perf_hooks”
- python - 多处理会减慢我的代码而不是加快它的速度
- php - Mantis - 导入 CSV 文件 - 作为应用程序错误 #11 引发错误
- android - 从 NFC 标签打开时,Firebase 动态 url 的行为很奇怪
- android-studio-3.0 - 重启 Android Studio 后 Java 代码转换为 XML
- visual-studio-code - Ubuntu上的VSCode,干净地重新安装
- apache-spark - 加载 csv 文件时获取 com.univocity.parsers.common.TextParsingException