Есть случай, у меня есть модал, который показывает некоторые данные из его состояния (массив), и его состояние устанавливается в функции componentDidMount (), как предполагает docs. Мне нужно показывать обновленные данные каждый раз, когда открывается модальное окно. Так что я смог сделать это с помощью функции componentWillReceiveProps (nextProps), как я показал ниже.
Но что, если я захочу перейти на функцию getDerivedStateFromProps? Как я собираюсь добиться такого же поведения с ним?
Вот код компонента, упрощенный ради:
export class PastOrdersModal extends Component {
constructor(props) {
super(props);
this.state = {
past: {},
isLoading: false,
modalVisible: false
};
}
async componentWillReceiveProps(nextProps) {
const response = await this.fetchPast();
this.setState({ past: response });
}
async componentDidMount() {
const response = await this.fetchPast();
this.setState({ past: response });
}
...
... some callback functions for handling modalvisible value ....
...
render(){
// here rendering state array with this.state.past.map(......) etc.
}
Функция fetchPast делает GET-запрос на мой сервер, все, что вам нужно знать, это вернуть массив в меня. Это работает отлично. ComponentWillReceiveProps вызывается каждый раз, потому что родительский компонент отправляет реквизиты modalVisible каждый раз.
Но componentWillRecieveProps устарел, и я не могу выполнить то же поведение с getDerivedStateFromProps. Как мне реализовать то же самое с ним.
Примечание : я не собираюсь использовать избыточность, я не собираюсь использовать mobx, я знаю, как их использовать, и это не то, чего я хочу. Дело в том, что поведение, которое я хочу, настолько простое, что я не хочу передавать значения другому компоненту, я не хочу передавать значения другому экрану, я просто хочу обновить простой компонент, который есть все, но фреймворк толкает его ограничения, чтобы сделать простейшие задачи сложнее всего, или я упускаю действительно огромную точку. (вероятно, последняя :))
Примечание : я знаю, что я ничего не делаю с nextProps, это было Единственное решение, которое я нашел.