为什么 reduxform 提交句柄没有收到任何数据?

Why the reduxform submit handle does not receive any data?

我正在构建一个示例来重现该问题,但代码目前为止非常复杂,我需要一些时间才能完成。因此,我将列出一些最低限度的信息。希望问题的根本原因非常明显,并且有人可以在我完成示例之前找出问题所在。

我将以下处理程序传递给表单的 onSubmit 属性:

  handleReduxForm(reactthing, values, more) {
    console.log(reactthing);
    console.log(values);
    console.log(more);
}

它打印出以下内容

毫无疑问,处理程序已被调用。

但是,我没有接收表单上捕获的任何数据作为函数的第一个参数,而是

第一个参数:似乎是一个反应dom对象的代理

第二个参数:一个事件对象

第三个参数: 只是为了确保我没有遗漏表单数据。目前是undefined

表格比较简单:

const checkoutForm = (props) => {
  const { handleSubmit, submitting, pristine } = props;


  return (
    <div>
      <div>
        <form onSubmit={handleSubmit}>


          <div className={styles.buttons}>
            <button
              className={`btn btn-primary ${styles['btn-submit']}`}
              type="submit"
              disabled={submitting || pristine}
            >
              Buy
            </button>
          </div>
        </form>
      </div>
    </div>
  );
};

const CheckoutForm = reduxForm({
  form: 'checkout',
  asyncValidate,
})(checkoutForm);

CheckoutForm.propTypes = {
  submitting: PropTypes.bool,
  pristine: PropTypes.bool,
  handleSubmit: PropTypes.func.isRequired,
};

export default CheckoutForm;

那么我的提交处理程序出了什么问题?为什么它没有获取任何表单数据?

编辑

这里有一个例子:https://www.webpackbin.com/bins/-Kh0qVhrYYi7iBqFXjSY

以下是主要文件列表:

Container.js

import React, {Component}  from 'react';
import CheckoutForm from './Form';

const testHandler = (a, b, c) => {
  console.log(` testHandler ${a}, ${b}, ${c}`); 
  console.log(` testHandler ${Object.keys(a)}, ${Object.values(a)}`);
  console.log(` testHandler ${Object.keys(b)}, ${Object.values(b)}`);  
}

class Container extends Component {
  render () {
    return (
      <div>
        <h1>
        Smart component
        </h1>
        <CheckoutForm 
          handleSubmit={testHandler}
         />
      </div>
      )
  }
}


export default  Container ;

Form.js

import React from 'react';
import { reduxForm, Field } from 'redux-form/immutable';

import Immutable from 'immutable';


const  { DOM: { input, select, textarea } } = React;


// <Field name="data" component={input}/>
// Uncaught Invariant Violation: input is a void element tag and must neither have `children` 
// nor use `dangerouslySetInnerHTML`. Check the render method of bound createElement.
const checkoutForm = (props) => {
  const { handleSubmit, submitting, pristine } = props;
  return (
    <div>
      <div>
        <form onSubmit={handleSubmit}>
          <h3>
            Checkout
          </h3>
          <div>
            <label>Data</label>
            <Field name="name" component="input" type="text" />
          </div>
          <div className='buttons'>
            <button
              className='btn btn-primary btn-submit'
              type="submit"
              disabled={submitting || pristine}
            >
              Buy
            </button>
          </div>
        </form>
      </div>
    </div>
  );
};

const CheckoutForm = reduxForm({
  form: 'checkout'
})(checkoutForm);

export default CheckoutForm;

我的例子的输出:

依赖项

使用 immutable 3.8.1 和 redux-form 6.6.1

您要做的是将 Container.js 中的位从

更改为
<CheckoutForm 
  handleSubmit={testHandler}
/>

至:

<CheckoutForm 
  onSubmit={testHandler}
/>

当我尝试更改时,我得到了一张带有值的地图。