Blog.js
import React, { useState, useEffect } from "react"
import Axios from "axios"
const Home = () => {
const [blog, setBlog] = useState([])
useEffect(() => {
loadBlog()
}, [])
const loadBlog = async () => {
await Axios.get(`http://localhost:3001/api/blog/get`)
.then((res) => {
console.log(res.data.data)
setBlog(res.data.data)
console.log(blog)
})
.catch((err) => {
console.log(err)
})
}
return (
<>
<div className="container">
<div className="col-lg-10">
<h2> React CRUD Operation </h2>
</div>
<div className="col-lg-2">
<button> Add Blog </button>
</div>
<table className="table table-striped">
<thead>
<tr>
<th>ID</th>
<th>Picture</th>
<th>Title</th>
<th>Short Description</th>
<th>Author</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<tr>
<td>{blog.id}</td>
<td>
<img src={"../../../public/logo512.png"} alt="not available" />
</td>
<td>{blog.title}</td>
<td>{blog.short_desc}</td>
<td>{blog.author}</td>
<td>
<button>Edit</button> <button>Delete</button>{" "}
</td>
</tr>
</tbody>
</table>
</div>
</>
)
}
export default Home
我正在从API获取数据并获取数据。数据可以正常运行,但不会进入setBlog Hook。当我控制台响应时,它很好并且可以成功获取数据,但问题是它不在setBlog挂钩中。我是新来的反应者,不知道为什么它不在setBlog挂钩中。任何帮助将不胜感激
答案 0 :(得分:1)
这是由于设置状态的异步性质。您编写的代码,
.then((res) => {
console.log(res.data.data)
setBlog(res.data.data)
console.log(blog)
})
在这里它是同步执行的,并且实际状态更新仅在完成后才发生。如果您在功能体内记录控制台状态变量,它将在下一次渲染时更新。例如
const Home = () => {
const [blog, setBlog] = useState([])
console.log(blog)
.
.
.
第一次加载组件时,blog
的值将被设置为空数组(因为它作为参数传递给setState
)。然后,将调用您的数据获取并设置博客的值。现在,blog
值将是您获取的数组。您可以在渲染中使用它。
您需要映射博客中的项目才能访问它。类似于以下内容。
.
.
.
<tbody>
{blog.map(function (entry) {
return (
<tr>
<td>{entry.id}</td>
<td>
<img src={"../../../public/logo512.png"} alt="not available" />
</td>
<td>{entry.title}</td>
<td>{entry.short_desc}</td>
<td>{entry.author}</td>
<td>
<button>Edit</button> <button>Delete</button>{" "}
</td>
</tr>
);
})}
</tbody>
.
.
.