在onChange事件中获取redux-form值

时间:2016-08-03 16:32:16

标签: javascript reactjs redux react-redux redux-form

在每次表单更新后,从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);
  }

1 个答案:

答案 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>