2017-01-02 2 views
1

У меня есть форма поддержки, которая доставляет сообщение об успешности из API после отправки. В классе компонента формы я получил mapStateToProps(), который получает значение от редуктора.Как обрабатывать уведомления в React-Redux в зависимости от состояния?

function mapStateToProps(state) { 
    return { contact_form: state.contact_form.all} 
} 

и показать уведомление пользователю, я

if(this.props.contact_form.data) { 
     notify_banner(" Your request is submitted successfully.","success",5000); 
     } 

Проблема с этим подходом является то, что государство не очищается вообще. Поэтому всякий раз, когда пользователь переходит на страницу формы поддержки, это предупреждение появляется по мере сохранения состояния.

Я посмотрел на это thread на состояние очистки после того, как действие выполнено, но это будет пустым состояние, и предупреждение не будет отображаться вообще.

Как я могу уведомить пользователя только один раз?

+0

Вы можете отправить действие СБРОС на 'componentWillMount' или' componentWillUnmount'. –

+0

Вы можете добавить флаг в свое состояние, которое сообщит вам, было ли оно уже «сообщено» (сообщение) и зависит от этого, показать его или нет;) – MariuszJasinski

+0

добавление флагов будет работать, если пользователю разрешено отправлять форму только один раз. Что делать, если пользователь хочет подать более одного раза? то этот флаг создавал бы сложности. –

ответ

1

Один из способов - отправить успешное действие после того, как пользователь отправит форму. Здесь я беру флаг = true, который означает, что форма отправлена. Таким образом, вы можете получить эту проверку, чтобы показывать баннерное уведомление.

if(this.props.contact_form.flag) { 
    notify_banner("Success"); 
    //disptach reset action here 
} 

после уведомления, немедленно сбросить contact_form.flag к ложному пути dipatching действия resetState.

export function resetState() { 
    const request = { 
    flag: false 
    }; 

    return { 
     type: CONTACT_FORM, 
     payload: request 
    }; 
} 
Смежные вопросы