Вы можете использовать componentDidUpdate
для этого или назначить функцию обратного вызова для вашего действия.Я покажу оба.
Сначала давайте посмотрим componentDidUpdate
,
Здесь вы можете сравнить ваши предыдущие данные и ваши текущие данные, и если есть какие-то изменения, вы можете установить свое состояние, дляНапример, если ваши данные - это массив.
state = {
data: []
}
, то внутри вашего componentDidUpdate
componentDidUpdate(prevProps, prevState) {
if(prevProps.data.length !== this.props.data.length) {
// update your state, in your case you just need userData, so you
// can compare something like name or something else, but still
// for better equality check, you can use lodash, it will also check for objects,
this.setState({ data: this.props.data});
}
}
_.isEqual(a, b); // returns false if different
Это было одно решение, другое решение - передать вызовЕсли вы вернетесь к своему действию,
Допустим, вы звоните this.props.getData()
, вы можете сделать что-то вроде этого
this.props.getData((data) => {
this.setState({ data });
})
здесь вы передадите свои данные из избыточного действия вашемуState.
Ваше действие приставки будет примерно таким.
export const getData = (done) => async dispatch => {
const data = await getSomeData(); // or api call
// when you dispatch your action, also call your done
done(data);
}