我试图在属性更改后使用getDerivedStateFromProps()
更新组件,但是它不起作用。我在某处读到了该函数是同步的-如果是这种情况,什么是做到这一点的好方法?
static async getDerivedStateFromProps(props, prevState) {
if (props) {
let students = [];
await this.getStudents({ class: props.classId })
.then(res => students = res.result)
.catch(err => {
console.log(err)
});
return {
students: students
};
}
return null;
}
getStudents = async (params) => {
const response = await fetch(apiRequestString.studentsByClass(params));
const body = await response.json();
if (response.status !== 200) throw Error(body.message);
return body;
}
从
Network
选项卡中,我注意到根本没有调用getStudents()
方法,因为没有对路由的请求。这是元素的初始状态:
// State of the parent element; 'classId' has initial value of null
<Students classId={this.state.classId} />
最佳答案
这是一种静态方法。它不能使用this
访问Object实例。您也可以通过将getStudents
设置为静态来修复它,然后通过引用一个类来使用它:
static async getStudents(params) {
...
}
await Students.getStudents({ class: props.classId })