redux-form: Input onChange 后触发 Form onSubmit

Posted

技术标签:

【中文标题】redux-form: Input onChange 后触发 Form onSubmit【英文标题】:redux-form: trigger Form onSubmit after Input onChange 【发布时间】:2016-12-18 12:55:35 【问题描述】:

我在 redux 表单中有一组简单的单选按钮。我需要单选按钮组的onChange事件来触发表单的onSubmit事件。

我正在使用 redux-form v5.3.1

设置

RadioFormContainer.js

class RadioFormContainer extends Component 
  render() 
    const submit = this.props;
    return (
      <RadioForm submit=submit />
    )
  


const mapDispatchToProps = (dispatch) => 
  return 
    submit: function(values, dispatch) 
      // API call after validation
    
  
;

RadioForm.js

class RadioForm extends Component 
  render() 
    const 
      submit, // custom post-validation handler
      // via redux form decorator:
      handleSubmit,
      submitting
     = this.props;
    return (
      <form onSubmit=handleSubmit(submit)>
        <input ...radioField
               checked=radioField.value == "one"
               type="radio"
               value="one"
               disabled=submitting />
        <input ...radioField
               checked=radioField.value == "two"
               type="radio"
               value="two"
               disabled=submitting />
      </form>
    );
  

尝试过的实现,不工作

1.从componentWillReceiveProps 拨打handleSubmit RadioForm

kyleboyle 的proposal here 根本不起作用。当我从componentWillReceiveProps 呼叫nextProps.handleSubmit 时,我得到this familiar error、Uncaught Error: You must either pass handleSubmit() an onSubmit function or pass onSubmit as a prop

componentWillReceiveProps(nextProps) 
  if (nextProps.dirty && nextProps.valid) 
    let doubleDirty = false;
    Object.keys(nextProps.fields).forEach(key => 
      if (nextProps.fields[key].value !== this.props.fields[key].value) 
        doubleDirty = true;
      
    );
    if (doubleDirty) 
      nextProps.handleSubmit();
    
  

2。通过onChange 处理程序在RadioForm 上调用submit

erikras proposes this here. 但它对我不起作用,因为它会跳过验证。

<input // ...
       onChange=(event) => 
          radioField.handleChange(event); // update redux state
          this.submit( myField: event.target.value );
        />

我认为 Bitaru (same thread) 在他的回复中试图说同样的话,但我不确定。为我调用 onSubmit 会导致异常 Uncaught TypeError: _this2.props.onSubmit is not a function

3.通过this.refs在表单上致电submit

这会导致表单实际提交,完全跳过 redux-form

每个人:How to trigger a form submit in child component with Redux?

<input // ...
       onChange=(event) => 
         radioField.onChange(event);
         this.refs.radioForm.submit();
        />

【问题讨论】:

这github.com/erikras/redux-form/issues/714 有帮助吗? 当你像这样导出 RadioForm 时应该使用 onSubmit 函数 `export default reduxForm( form: 'remoteSubmit', // 这个表单的唯一标识符 onSubmit: submit // 必须传递提交函数到 onSubmit )(RemoteSubmitForm)' redux-form.com/6.6.3/examples/remotesubmit 【参考方案1】:

您是否尝试过添加隐藏的提交按钮

<input ref="submit" type="submit" style="display: none;"/>

单选按钮 onChange 会调用 refs.submit.click() ?

【讨论】:

【参考方案2】:

我认为你提到的第二种方法会起作用,如果你有一个字段级别的验证和访问错误和触及元状态。

【讨论】:

以上是关于redux-form: Input onChange 后触发 Form onSubmit的主要内容,如果未能解决你的问题,请参考以下文章

在 React、Redux-Form 和 GraphQL 中选择输入中的 onChange 事件从数据库中查询

react input 输入中文拼音和onChange事件的交互

onchange监听input值变化及input隐藏后change事件不触发的原因与解决方法(设置readonly后onchange不起作用的解决方案)

input file 添加图片预览 绑定onchange执行函数 重复添加不执行onchange函数

归纳一下input中span提示以及input中onchange事件

在 Rails 中使用“f.input 集合”的 onChange 方法