【问题标题】:Redux-form calling submit outside form componentRedux-form 在表单组件外调用提交
【发布时间】:2017-03-23 15:35:24
【问题描述】:

我正在使用动态表单 (redux-form) 构建应用程序。我想当用户单击提交按钮打印值时。请注意,我的提交按钮位于我的应用程序标题中(表单外)。为了实现这一点,我正在关注 Redux-form 的 tutorial。当我按下“保存”按钮时,我的控制台中出现此错误:(0 , _reduxForm.submit) is not a function(…)

我的代码:

提交组件

import React from 'react'
import {connect} from 'react-redux'
import {submit} from 'redux-form'

const RemoteSubmitButton = ({dispatch}) =>
   // How to get 'form' prop here ?
  <button type="submit" onClick={() => dispatch( submit() ) }>Save</button>
export default connect()(RemoteSubmitButton)

主要组件

// Import librairies
import Submit from 'submitBtn'
export default class extends Component {
    ...
    render(){
         return (
            // html code
            <Submit form="newuser" /> // form prop gonna be dynamic
        )
    }
}

提交.js

import {SubmissionError} from 'redux-form'

const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))

function submit(values) {
  return sleep(1000) // simulate server latency
    .then(() => {
      window.alert(`You submitted:\n\n${JSON.stringify(values, null, 2)}`)
    })
}

export default submit

new.js(新用户)

//Import librairies
import submit from 'submit'

class UserForm extends Component {
  render() {
    const {error, resetForm, handleSubmit} = this.props

    return (<form onSubmit={ handleSubmit }>
             <!-- Generate dynamic fields -->
            </form>)
  }
}

let FormWrapper = reduxForm({form: 'newuser', onSubmit: submit})(UserForm)

const selector = formValueSelector('newuser') // <-- same as form name
FormWrapper = connect(state => state.form)(FormWrapper)

你能告诉我我做错了什么吗?或者我该怎么做才能让它工作?

【问题讨论】:

  • 您能否确认您使用的是哪个版本的redux-form?你所做的似乎是正确的。
  • @Ashley'CptLemming'Wilson 我使用的是 v6.1.1

标签: javascript reactjs redux redux-form


【解决方案1】:

根据release notesv6.2.0中添加了submit动作。

您需要升级您的 redux-form 版本才能使其正常工作。

编辑:

为了提交表单,您需要在 RemoteSubmitButton 组件中使用 form 属性:

import React from 'react'
import {connect} from 'react-redux'
import {submit} from 'redux-form'

const RemoteSubmitButton = ({ dispatch, form }) =>  // Destructure the props here
  <button type="submit" onClick={() => dispatch( submit(form) ) }>Save</button>
export default connect()(RemoteSubmitButton)

【讨论】:

  • 我已经升级了库但没有运气。当我指定 formid 并将其值作为表单道具传递给提交按钮时,它可以工作。但我可以这样做,因为我有许多使用相同按钮的表单。
  • 我不太确定我是否跟随。您是说您想要一个可用于多个表单的提交按钮?
  • 确切,但它并不重要...我已经向&lt;Submit form='myForm' /&gt; 添加了一个道具,但我不知道如何从提交组件的主体中获取它的值(请参阅我的更新代码)。
  • 我已经使用传递给 submit 操作的 form 属性更新了我的答案。这是你的意思吗?
  • 我们可以在提交操作时发送参数吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-14
  • 1970-01-01
  • 2018-08-16
  • 2018-11-16
  • 1970-01-01
相关资源
最近更新 更多