2017-02-22 31 views
0

У меня есть простой чек, который я должен делать, когда пользователь нажимает на кнопку:обновление реквизита, не выходя из функции в React и Redux

<button 
    onClick={() => { 
     this.props.validatingActions.validate(this.props.Email.Value); 
     this.props.submittingActions.submitValidation(this.props.Email.IsValid); 
}}>Submit</button> 

На первом, по электронной почте в Redux магазин проверяет, то некоторые действия этого , когда электронная почта действительна или нет.

Проблема заключается в том, что this.props не обновляется после выполнения this.props.validatingActionsvalidate, они только обновления после выхода анонимного onClick' function, therefore this.props.Email.IsValid` имеет старое значение.

Как правильно настроить опоры в таких ситуациях?

+0

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

+0

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

+0

Депрессия функции - это способ гарантировать, что она не вызывается несколько раз - то есть нажатие кнопки 5 раз не приведет к 5 представлениям. Можете ли вы опубликовать свои творения и редукторы? –

ответ

0

Попробуйте использовать Redux-Form http://redux-form.com/6.5.0/examples/syncValidation/, если вы хотите работать с формами

+0

Кажется хорошим, но я не могу переключиться на эту библиотеку в текущей ситуации по большинству причин, так, как насчет решения текущей проблемы? –

+0

Это плохой совет по двум причинам. Redux-Form сложна и мощна и не нужна для большинства ситуаций, и это определенно не отвечает на текущий вопрос. – markerikson

2

Пожалуйста, обратите внимание, что Ён не должны (и в большинстве случаев не может) изменить компонент собственных реквизита. Пожалуйста, проверьте это SO answer для получения более подробной информации.

Anser обновление

Также следует помнить, что React setState является асинхронным, так изменения состояния не сделаны immidiately после вызова setState. И в результате реквизит, который основан на состоянии, также не обновляется сразу после отправки действия.

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

+0

Я не меняю их, мои компоненты реквизита управляются функцией «connect», предоставляемой библиотекой «реакция-редукция» и функцией «mapStateToProps», которая отвечает за отображение хранилища редукта в составные реквизиты. –

+0

В этом случае вам необходимо отправить действие, чтобы вызвать редуктор состояния, чтобы обновить значения, которые вы хотите изменить. Вы можете сделать это, используя 'mapDispatchtoProps' в' connect', как описано http://stackoverflow.com/questions/39419237/what-is-mapdispatchtoprops –

+0

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

 Смежные вопросы

  • Нет связанных вопросов^_^