react js无法在setState回调函数中获取更新值
react js cannot get updated value in setState callback function
createSyllabusObject = () => {
let number = 0;
let syllabusTemp = [];
let { lessonsList, exportedSyllabus } = this.state;
Promise.all(lessonsList.map(async (lesson) => {
let name = null;
await getTeacherById(lesson.teacher).then(res => {
name = res.data.name
number += 1;
})
syllabusTemp.push({
No: number,
title: lesson.title,
description: lesson.description,
teacher: name,
Time: moment(lesson.commenceDate).format('DD/MM/YYYY HH:mm')
})
})).then(() => {
console.log("temp", syllabusTemp)
this.setState(
{
exportedSyllabus: syllabusTemp
}
, () => {
console.log("now", exportedSyllabus)
})
})
}
单击按钮时将调用此函数。
我第一次点击按钮时无法在 console.log("now", exportedSyllabus)
中获取更新的状态值,但是如果我点击它超过 1 次,所有其他结果都是正确的。
无论点击多少次,console.log("temp", syllabusTemp)
的结果总是正确的。
我真的很困惑,为什么我第一次点击按钮时无法正确输出 console.log("now", exportedSyllabus)
。
您需要在 setState
回调中访问当前状态,而不是保存在 createSyllabusObject
附件中的先前状态。
createSyllabusObject = () => {
let number = 0;
let syllabusTemp = [];
let { lessonsList, exportedSyllabus } = this.state;
Promise.all(lessonsList.map(async (lesson) => {
let name = null;
await getTeacherById(lesson.teacher).then(res => {
name = res.data.name
number += 1;
})
syllabusTemp.push({
No: number,
title: lesson.title,
description: lesson.description,
teacher: name,
Time: moment(lesson.commenceDate).format('DD/MM/YYYY HH:mm')
})
})).then(() => {
console.log("temp", syllabusTemp)
this.setState(
{
exportedSyllabus: syllabusTemp
}
, () => {
console.log("now", this.state.exportedSyllabus) // <-- access this.state!!
})
})
}
createSyllabusObject = () => {
let number = 0;
let syllabusTemp = [];
let { lessonsList, exportedSyllabus } = this.state;
Promise.all(lessonsList.map(async (lesson) => {
let name = null;
await getTeacherById(lesson.teacher).then(res => {
name = res.data.name
number += 1;
})
syllabusTemp.push({
No: number,
title: lesson.title,
description: lesson.description,
teacher: name,
Time: moment(lesson.commenceDate).format('DD/MM/YYYY HH:mm')
})
})).then(() => {
console.log("temp", syllabusTemp)
this.setState(
{
exportedSyllabus: syllabusTemp
}
, () => {
console.log("now", exportedSyllabus)
})
})
}
单击按钮时将调用此函数。
我第一次点击按钮时无法在 console.log("now", exportedSyllabus)
中获取更新的状态值,但是如果我点击它超过 1 次,所有其他结果都是正确的。
无论点击多少次,console.log("temp", syllabusTemp)
的结果总是正确的。
我真的很困惑,为什么我第一次点击按钮时无法正确输出 console.log("now", exportedSyllabus)
。
您需要在 setState
回调中访问当前状态,而不是保存在 createSyllabusObject
附件中的先前状态。
createSyllabusObject = () => {
let number = 0;
let syllabusTemp = [];
let { lessonsList, exportedSyllabus } = this.state;
Promise.all(lessonsList.map(async (lesson) => {
let name = null;
await getTeacherById(lesson.teacher).then(res => {
name = res.data.name
number += 1;
})
syllabusTemp.push({
No: number,
title: lesson.title,
description: lesson.description,
teacher: name,
Time: moment(lesson.commenceDate).format('DD/MM/YYYY HH:mm')
})
})).then(() => {
console.log("temp", syllabusTemp)
this.setState(
{
exportedSyllabus: syllabusTemp
}
, () => {
console.log("now", this.state.exportedSyllabus) // <-- access this.state!!
})
})
}