我试图在属性更改后使用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 })

07-24 17:17