更新道具而不在React和Redux中保留功能

时间:2017-02-22 12:47:00

标签: javascript reactjs redux 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函数后才更新,因此{{1}有旧价值。

如何在这种情况下正确更新道具?

3 个答案:

答案 0 :(得分:2)

请注意,您不应该(并且在大多数情况下无法)更改组件自己的道具。 请查看此SO answer了解详情。

回答更新

另请注意,React setState是异步的,因此在调用setState后不会立即进行状态更改。因此,基于状态的道具也不会在发送动作后立即更新。

当更新prop时,会重新呈现组件,如果您需要立即更改prop值,我认为在组件呈现功能中不需要它,但在其他地方决定是否执行其他操作。如果是这样,则应该在操作中处理:您可以使用redux-thunk来分派异步或条件操作。

答案 1 :(得分:0)

如果您想使用表单

,请尝试使用Redux-Form http://redux-form.com/6.5.0/examples/syncValidation/

答案 2 :(得分:0)

改变道具不是解决它的方法。 您的验证和提交逻辑在哪里?直接在减速机上? 要么在同一动作上做这两项事情,要么使用副作用库一个接一个地做。 无论如何,从动作的名称来看,我不明白为什么要为此使用redux动作。对我来说,验证输入听起来并不像状态改变。 您应该使用简单的功能对其进行验证,然后根据是否可以执行相应操作(执行操作)。