Я использую крючок жизненного цикла getDerivedStateFromProps в последней версии React 16.5.2. Почему я не могу получить доступ к этому объекту для компонента? Я что-то делаю не так?
class EmailInput extends Component {
state = { email: this.props.defaultEmail };
handleChangeEvent = event => {
this.setState({ email: event.target.value });
};
getDerivedStateFromProps() {
this.doSomething();
}
doSomething = () => {
//do something here
}
render() {
return <input onChange = {this.handleChangeEvent} value = {this.state.email} />;
}
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы не можете использовать this для доступа к нестатическому методу. Вам нужно определить статический метод:
static getDerivedStateFromProps() {
EmailInput.doSomething();
// ^^ class name
//OR,
// this.doSomething(); // accessible, coz doSomething is now static method
}
static doSomething() {
//do something here
}
Вы можете узнать больше о статическом методе здесь, в mdn docs.
Кроме того, мы используем this.props, this.state для доступа к реквизитам и состояниям соответственно нестатическим методом. Но поскольку getDerivedStateFromProps - статический метод, нам нужно получить доступ из его параметров:
static getDerivedStateFromProps(props, state) {
// correct
console.info(props, state)
// incorrect
// console.info(this.props, this.state)
// `this` can be used only for static methods
// that are inside the class
}
Но как насчет случая, когда нужно вызвать setState сразу после некоторой функции обещания?
Вы не должны настраивать обещание из этого метода. Это не то, как он предназначен для использования.
Не забудьте добавить
staticпередgetDerivedStateFromProps.