将 props 传递给 Field validate 会给出以前的 props 值
Passing props to Field validate gives previous props values
将 props 传递给 Field validate 会给出以前的 props 值,尤其是在本例中为 Quantity。使用 this sandbox,请按照下列步骤操作:
- 打开沙箱然后打开控制台
- 将值设置为 2
- Select数量为2
- 从控制台,数量仍设置为 1
- 按提交
- 弹出窗口具有正确的值
{"amount":4,"quantity":"2","value":"2"}
- 将值更改为 1(现在控制台数量为 2)
- 出现错误信息
相反,应该发生什么:
- 第 4 步和第 7 步应该有正确的数量。道具有以前的价值,没有更新
- 第 8 步应该不会出错,因为 1 * 2 = 2
- 字段验证应该有当前的 props 值
我按照 this issue 来处理传递 props 以验证函数,但似乎每当 props 更改时组件都没有更新,而是具有以前的值。
试试这个
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!'
}
这个适合我。
用您的 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。
将 props 传递给 Field validate 会给出以前的 props 值,尤其是在本例中为 Quantity。使用 this sandbox,请按照下列步骤操作:
- 打开沙箱然后打开控制台
- 将值设置为 2
- Select数量为2
- 从控制台,数量仍设置为 1
- 按提交
- 弹出窗口具有正确的值
{"amount":4,"quantity":"2","value":"2"}
- 将值更改为 1(现在控制台数量为 2)
- 出现错误信息
相反,应该发生什么:
- 第 4 步和第 7 步应该有正确的数量。道具有以前的价值,没有更新
- 第 8 步应该不会出错,因为 1 * 2 = 2
- 字段验证应该有当前的 props 值
我按照 this issue 来处理传递 props 以验证函数,但似乎每当 props 更改时组件都没有更新,而是具有以前的值。
试试这个
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!'
}
这个适合我。
用您的 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。