将道具传递给Field validate会赋予以前的道具值

时间:2018-10-02 04:54:00

标签: reactjs redux-form

将道具传递到现场验证会给出以前的道具值,在这种情况下尤其是数量。使用this sandbox,请按照以下步骤操作:

  1. 打开沙箱,然后打开控制台
  2. 将值设置为2
  3. 选择数量为2
  4. 从控制台,数量仍设置为1
  5. 按提交
  6. 弹出窗口具有正确的值{"amount":4,"quantity":"2","value":"2"}
  7. 将值更改为1(控制台数量现在为2)
  8. 出现错误消息

相反,应该发生什么:

  • 第4步和第7步应具有正确的数量。道具具有先前值,未更新
  • 第8步应该没有错误,因为1 * 2 = 2
  • 字段验证应具有当前的道具值

我跟随this issue来处理传递的道具以验证功能,但是似乎只要道具改变,组件就不会更新,而是具有先前的值。

2 个答案:

答案 0 :(得分:0)

尝试这个

validateAmount = (amount) => {
 //const { value, quantity } = this.props.formValues
 // instead for using values from props ,get values from current state 
  const { value, quantity } = store.getState().form.simple.values;
  console.log('amount:', amount, 'value:', value, 'quantity:', quantity)
  if (amount < value * quantity) return 'Nope!'
}

答案 1 :(得分:0)

这个对我有用。

用您的validateAmount函数替换此代码。

validateAmount = (amount, e) => {
      //const { value, quantity } = this.props.formValues
      console.log('amount:', amount, 'value:', e.value, 'quantity:', e.quantity)
      if (amount < e.value * e.quantity) return 'Nope!'
}

此处第二个参数获取表单值的当前状态。第一个答案是Redux State。