在每次表单更新后,从redux-form
管理的表单中获取值的正确方法是什么?每次表单更改时,我都需要使用在表单中输入的值来发送操作。
我当前的解决方案获取旧值,而不是刚刚更新的值。
onFormChange(e) {
const { fieldValue1, fieldValue2, fieldValue3 } = this.props.fields;
console.log(fieldValue1.value, fieldValue2.value, fieldValue3.value);
}
render() {
return (
<form onChange={this.onFormChange}>
// inputs here
</form>
);
}
我的另一个解决方案就是这个,但我不知道它有多可靠:
onFormChange(e) {
console.log(e);
setTimeout(() => {
const { fieldValue1, fieldValue2, fieldValue3 } = this.props.fields;
console.log(fieldValue1.value, fieldValue2.value, fieldValue3.value);
}, 0);
}
答案 0 :(得分:5)
使用redux-form 6,您可以使用formValueSelector
:
import { formValueSelector } from 'redux-form';
const selector = formValueSelector('myFormName');
connect(
state => ({
values: selector(state, 'fieldValue1', 'fieldValue2', 'fieldValue3');
})
)(MyFormComponent);
现在,您可以比较当前值以及componentWillReceiveProps
中的先前值:
componentWillReceiveProps(nextProps) {
const nextValues = nextProps.values;
const values = this.props.values;
// if at least one of the form values changed
if(Object.keys(nextValues).some((key) => nextValues[key] !== values[key])) {
console.log(nextProps.values); // do something with values
}
}
使用redux-form直到版本6,您不必使用formValueSelector
作为redux-form自动添加values
prop到您的装饰表单。< / p>