我有简单的检查,当用户点击按钮时我必须这样做:
<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}有旧价值。
如何在这种情况下正确更新道具?
答案 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动作。对我来说,验证输入听起来并不像状态改变。 您应该使用简单的功能对其进行验证,然后根据是否可以执行相应操作(执行操作)。