Правильный способ решения этой проблемы - установить глобальный флаг loading
и в вашем методе componentDidUpdate()
проверить значение, чтобы определить, что действие только что выполнено. Кажется, у вас уже есть флаг isLoading
. Просто установите его, когда действие отправлено, и отмените его после того, как оно выполнено / не выполнено. И в componentDidUpdate()
:
function componentDidUpdate(prevProps) {
if (prevProps.isLoading && !this.props.isLoading) {
// do something
}
}
Конечно, вам нужно connect()
ваш флаг загрузки для вашего компонента, чтобы достичь этого.
Если все, что вас волнует, это список активов изменилось, вы можете просто проверить изменение этого реквизита в componentDidUpdate()
:
function componentDidUpdate(prevProps) {
if (prevProps.ImageJson !== this.props.ImageJson) {
// do something
}
}
Другое решение - отправить обратный вызов вашему диспетчеру действий, что делает ваш код более тесно связанным, и я не рекомендую, но это тоже работает. Итак, когда вы connect()
, вы можете:
getCollection: (onSuccess) => dispatch(getListActionDispactcher(onSuccess)),
В вашем диспетчере действий:
export const getListActionDispactcher = (onSuccess) => (dispatch) => {
// ...once API finished/failed
onSuccess(someData);
}
Наконец, в вашем компоненте:
this.props.getCollection((result) => {
console.log('succeeded!', result);
// hide modal, etc..
}