#reactjs #redux #react-redux
#reactjs #redux #react-redux
Вопрос:
У меня есть компонент AddCarWash
, который отображает форму, и когда эта форма отправляется, я делаю перенаправление browserHistory.push(url)
на другой компонент AllCarWash
. Кроме того, перед перенаправлением я помещаю в хранилище redux message : 'CarWash was save successfully'
. Это сообщение будет показано в целевом компоненте AllCarWash
.
Очевидно, что это сообщение должно отображаться только один раз, и в любом дальнейшем пользовательском действии оно не должно отображаться. Поэтому я должен удалить данные из хранилища redux, когда мне было показано. Как я могу это сделать? Поместите resetMessageHandler
все и каждого Link
на страницу или есть гораздо более простой способ?
Ответ №1:
Другой альтернативой является использование componentWillUnmount() для удержания отправленного действия, которое срабатывает при переходе от компонента.
componentWillUnmount() {
// destroy errors for the form here
this.props.destroyErrorMessage();
}
Ответ №2:
вот что вы можете сделать, когда вы получаете сообщение в redux на componentWillReceiveProps или ComponenetWillMount, тогда вы можете установить тайм-аут в методе на 20-30 секунд и в функции тайм-аута обновить состояние
//sample code
componentWillReceieveProps(props){
if(props.message){
setTimeout(()=>{
this.props.dispatch(removeMessageAction())
},5000);
}
}
то же самое вы можете записать в функцию componentWillMount, в качестве альтернативы вы также можете использовать метод componentDidUpdate и componentDidMount
Комментарии:
1. Это может работать, но это немного другое поведение, чем я хочу
2. тогда у меня есть альтернативный совет: установите флаг при получении сообщения в реквизитах и при следующем рендеринге, если флаг все еще установлен, удалите сообщение, но вам также следует использовать time, потому что два рендеринга могут когда-нибудь повторяться