reactjs - 如何使用 redux-form 进行受控输入?

标签 reactjs redux-form

我有一个表单组件,其中有一个输入字段。一旦用户在输入字段中输入一个数字并按提交,它应该成为该输入值的两倍。

import {Field} 'redux-form'; 
class Multiply extends React.Component {

  onInputChange = (stateKey) => (e) => {
    this.setState({ [stateKey]: e.currentTarget.value.trim() });
  };

  onSubmit = () => {
    this.setState({ volume: this.state.volume *2  });
  };

  render(): JSX.Element {
    return (
      <div>
        <div>
          <form onSubmit={this.props.handleSubmit(this.onSubmit)}>
            <Field
              name="volume"
              placeholder="Volume"
              component={renderInput}
              type="number"
              value={this.state.volume}
              onChange={this.onInputChange('volume')}
              validate={required}
            />

            <div>
              <button type="submit">
                Multiply by 2
              </button>
            </div>
          </form>
        </div>
      </div>
    );
  }
}

一旦我点击按钮,值就不会改变。但不是 <field>如果我使用<input>然后就可以正常工作了。为什么 ?

最佳答案

Redux 表单输入由其 Redux 状态决定。这意味着您必须使用其 API 来处理它们,因为 Field 为您的 renderInput 函数提供一个输入值,该值等于 Redux 存储中该字段名称的值。

您需要做的是

  1. 插入字段值。这样做的一个好方法是使用 formValues()
  2. 注入(inject)一个调度 change action 的函数对于该表单和该字段
  3. 在您的按钮中调用此类函数。

这就是它的要点:

const MyForm = ({ double }) => {
    /* Your form implementation, then */
    <button type="submit" onClick={double}>Double and submit</button>
};

const mapDispatchToProps = (dispatch, props) => ({
    double: () => dispatch(change("foo", "number", props.number * 2))
});

const WithDoublingFunction = formValues("number")(connect(null, mapDispatchToProps)(MyForm));

export default reduxForm({
    form: "foo",
    // the rest of your config
})(WithDoublingFunction);

Here's a working sandbox of such functionality

关于reactjs - 如何使用 redux-form 进行受控输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49098798/

相关文章:

reactjs - 无法在 redux-form-material-ui TextField 中设置 defaultValue

javascript - 如何在 meteor 中显示服务器端错误

javascript - 在 react 中渲染后将 getOffsetHeight 与异步数据结合使用

javascript - 箭头函数不应返回赋值 no-return-assign

ajax - 如何基于异步源设置初始值,例如使用 redux-form 的 ajax 调用

javascript - redux 形式错误 : Element type is invalid: expected a string or function

javascript - react 选择可创建的 "no options"而不是 "create"

node.js - 加密聊天和普通消息

javascript - 如何在条件渲染中预渲染 React 组件?

javascript - 以编程方式 react 设置组件 Prop