从 React 中的 api 获取数据
2020-08-20
113
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 Hook。我是 React 新手,不知道为什么无法进入 setBlog Hook。任何帮助都将不胜感激
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 的值。现在
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>
.
.
.
Kenny John Jacob
2020-08-20