从 API 中获取对象列表后,如何使用反应钩子将列表设置到组件的状态中?
After fetching a list of objects from an API, how do I set the list into the Component's State using react hooks?
从 API 获取学生列表后,我想使用 React Hooks 将列表设置为状态,但我失败了。这是我的代码:
const Book = ({ book }) => {
const [students, setStudents] = React.useState([])
const [form, setForm] = React.useState(false)
const closeForm = () => setForm(false)
function loadStudentList(){
fetch('http://127.0.0.1:8000/api/students/')
.then((response) => response.json())
.then(studentsList => {
studentsList.map((student) => {
setStudents(students => [...students, student])
})
setForm(true)
console.log(students)
})
}
console.log(学生)returns一个空数组仍然..
学生状态需要一些时间来填充,因此您的每个 setStudents(...) 调用都将排队,并且 运行 以 non-code-blocking 的方式。这意味着您的 console.log 将在设置发生之前执行。您可以通过创建一个 useEffect 挂钩来监视学生状态,然后在它填充时将其调出来解决这个问题。尝试添加以下内容,看看是否有效!
useEffect(() => {
if (students) console.log(students)
}, [students])
此外,您应该同时将所有学生设置为 setStudents(studentsList)
const Book = ({ book }) => {
const [students, setStudents] = React.useState([])
const [form, setForm] = React.useState(false)
const closeForm = () => setForm(false)
function loadStudentList(){
fetch('http://127.0.0.1:8000/api/students/')
.then((response) => response.json())
.then(studentsList => {
setStudents(studentList)
setForm(true)
})
}
console.log(students)
从那里,根据需要在您的 React
应用中访问 students
。
从 API 获取学生列表后,我想使用 React Hooks 将列表设置为状态,但我失败了。这是我的代码:
const Book = ({ book }) => {
const [students, setStudents] = React.useState([])
const [form, setForm] = React.useState(false)
const closeForm = () => setForm(false)
function loadStudentList(){
fetch('http://127.0.0.1:8000/api/students/')
.then((response) => response.json())
.then(studentsList => {
studentsList.map((student) => {
setStudents(students => [...students, student])
})
setForm(true)
console.log(students)
})
}
console.log(学生)returns一个空数组仍然..
学生状态需要一些时间来填充,因此您的每个 setStudents(...) 调用都将排队,并且 运行 以 non-code-blocking 的方式。这意味着您的 console.log 将在设置发生之前执行。您可以通过创建一个 useEffect 挂钩来监视学生状态,然后在它填充时将其调出来解决这个问题。尝试添加以下内容,看看是否有效!
useEffect(() => {
if (students) console.log(students)
}, [students])
此外,您应该同时将所有学生设置为 setStudents(studentsList)
const Book = ({ book }) => {
const [students, setStudents] = React.useState([])
const [form, setForm] = React.useState(false)
const closeForm = () => setForm(false)
function loadStudentList(){
fetch('http://127.0.0.1:8000/api/students/')
.then((response) => response.json())
.then(studentsList => {
setStudents(studentList)
setForm(true)
})
}
console.log(students)
从那里,根据需要在您的 React
应用中访问 students
。