React-redux удаляет данные из хранилища после того, как они были показаны один раз

#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, потому что два рендеринга могут когда-нибудь повторяться