2017-02-22 137 views
0

我有简单的检查,我必须当用户点击该按钮做:更新道具反应,终极版

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

起初,电子邮件在终极版专卖店验证,那么,有些动作做,当电子邮件有效或没有。

的问题是,this.props不执行this.props.validatingActionsvalidate后更新,他们留下匿名onClick' function, therefore this.props.Email.IsValid`有旧值之后是只更新。

我怎样才能正确地更新在这种情况下的道具?

+0

你为什么不打电话时用户更改电子邮件字段验证?如果您担心性能,这可能是一个反弹功能。 –

+0

因为这是简化的例子,所以我有很多这样的领域。你的意思是什么? –

+0

删除函数是确保不会多次调用的一种方法 - 也就是说,单击按钮5次不会导致5次提交。 你可以发布你的动作创作者和减速器吗? –

回答

0

尝试使用Redux的表格http://redux-form.com/6.5.0/examples/syncValidation/,当你想用的形式合作

+0

看起来不错,但由于大多数原因,我无法在目前情况下切换到此库,那么,解决当前问题又如何呢? –

+0

由于两个原因,这是不好的建议。 Redux-Form非常复杂而且功能强大,在大多数情况下不需要,它绝对不会回答当前的问题。 – markerikson

2

请注意,渊不应该(在大多数情况下不能)改变组件自己的道具。 请查阅此SO answer了解更多详情。

豆更新

另外请注意,阵营setState是异步的状态变化不是要求setState后immidiately制造。因此,基于状态的道具在派出行动后也不会立即更新。

当道具被更新的组件进行重新渲染,如果你需要改变的道具价值immidiately我以为它不需要在组件渲染功能,但其他somewehere,以决定是否执行另一个动作与否。如果是这样,它应该采取行动处理:您可以使用redux-thunk来分派异步或条件操作。

+0

我不会改变他们,我的组件的道具,通过提供'connect'功能管理'反应,redux'库和“mapStateToProps”功能,whhich负责映射Redux的商店componeent道具。 –

+0

在这种情况下,您应该调度一个动作来调用状态缩减器来更新您要更改的值。如上所述http://stackoverflow.com/questions/39419237/what-is-mapdispatchtoprops –

+0

可以内'connect'做那些使用'mapDispatchtoProps'这是我做的,这是最主要的问题,我们不能有新的道具在功能内价值不离开它。 –