【问题标题】:Redux Form - You must either pass handleSubmit() an onSubmit function or pass onSubmit as a propRedux 表单 - 您必须将 handleSubmit() 传递给 onSubmit 函数或将 onSubmit 作为道具传递
【发布时间】:2018-01-01 12:49:54
【问题描述】:

我想创建一个简单的表单,它接收电子邮件地址,然后将其添加到我们的数据库中。我选择了 React Forms,因为它促进了整个开发过程并减少了时间。

但是,当我尝试发布我的表单时,我收到了以下错误:未捕获的错误:您必须将 handleSubmit() 传递给 onSubmit 函数或将 onSubmit 作为道具传递

这是我的 AddUserForm.js

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

const AddUserForm = ({ handleSubmit }) => {
  return (
    <form onSubmit={handleSubmit}>
      <div>
        <Field name="email" component="input" type="email" />
      </div>
      <button type="submit">Bjud in</button>
    </form>
  )
}
export default reduxForm({
  form: 'addUser'
})(AddUserForm)

这是我的 addUserAction

import axios from 'axios'
import settings from '../settings'

axios.defaults.baseURL = settings.hostname

export const addUser = email => {
  return dispatch => {
    return axios.post('/invite', { email: email }).then(response => {
      console.log(response)
    })
  }
}

这是我的 AddUserContainer.js:

import React, { Component } from 'react'
import { addUser } from '../../actions/addUserAction'
import AddUserForm from './Views/AddUserForm'
import { connect } from 'react-redux'

class AddUserContainer extends Component {
  submit(values) {
    console.log(values)
    this.props.addUser(values)
  }

  render() {
    return (
      <div>
        <h1>Bjud in användare</h1>
        <AddUserForm onSubmit={this.submit.bind(this)} />
      </div>
    )
  }
}

function mapStateToProps(state) {
  return { user: state.user }
}

export default connect(mapStateToProps, { addUser })(AddUserContainer)

感谢阅读!

【问题讨论】:

  • 我得到:onSubmit 没有定义。
  • export default connect()(reduxForm({ form: 'addUser', onSubmit, })(AddUserForm))。还要记得从 react-redux 导入 connect
  • onSubmit 仍未定义
  • 等一下,我会发布完整的答案。
  • 感谢

标签: javascript reactjs redux-form


【解决方案1】:

onSubmit未定义,因为它没有被声明。跟随路径:

注意values 变量保存字段数据,在您的情况下,它将保存键入的电子邮件。

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

const AddUserForm = ({ handleSubmit }) => {
  return (
    <form onSubmit={handleSubmit}>
      <div>
        <Field name="email" component="input" type="email" />
      </div>
      <button type="submit">Bjud in</button>
    </form>
  )
}

const onSubmit = (values, dispatch) => {
  dispatch(    // your submit action //      );
};

export default connect()(reduxForm({
  form: 'addUser', 
  onSubmit, 
})(AddUserForm));

【讨论】:

  • 我明白了。所以我可以在那里传递我的行动? :O
  • @MartinNordström 是的,这么想。您可以尝试将 axios 请求的整个逻辑粘贴到那里,或者只是函数。顺便说一句 - 你的行动/减速器等在哪里? :P
  • 哦!没看到你的问题。我的操作/减速器位于单独的文件夹中,我仍然不确定如何将减速器应用于此。而我对这个表单的操作基本上只是一个 axios post 请求。
  • 如果是这样,为什么不用声明 onSubmit 函数就可以工作? codesandbox.io/s/mZRjw05yp
猜你喜欢
  • 1970-01-01
  • 2020-02-26
  • 2019-06-06
  • 2013-07-08
  • 2011-03-19
  • 2020-09-03
  • 2021-12-01
  • 1970-01-01
  • 2011-03-24
相关资源
最近更新 更多