2016-11-09 2 views
0

Я создаю приложение с динамическими формами (redux-form). Я бы хотел, чтобы пользователь нажал кнопку отправки, чтобы распечатать значения. Обратите внимание, что моя кнопка отправки помещается в мой заголовок приложения (вне формы). Чтобы достичь этого, я следую за этим tutorial из Redux-формы. Когда я нажимаю кнопку «Сохранить», я получил эту ошибку в консоли: (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 
     ) 
    } 
} 

submit.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 (New User)

//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) 

Можете ли вы сказать мне, что я делаю неправильно? или Что я могу сделать, чтобы он работал?

+0

Можете ли вы подтвердить, что версия 'Redux-form' вы с помощью? То, что вы делаете, конечно, кажется правильным. –

+0

@ Ashley'CptLemming'Wilson Я использую v6.1.1 –

ответ

1

submit Действие было добавлено в v6.2.0 согласно release notes.

Для этого вам необходимо обновить версию redux-form.

Edit:

Для того, чтобы отправить форму, вы должны использовать form опору в вашем RemoteSubmitButton компонента:

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) 
+0

Я обновил lib без везения. Когда я указываю 'form'' id' и передаю его значение для отправки кнопки в качестве реквизита формы, он работает. Но я могу сделать это в моем случае, потому что у меня много форм, которые используют одну и ту же кнопку. –

+0

Я не слишком уверен, что я следую. Вы говорите, что хотите одну кнопку отправки, которая может использоваться для нескольких форм? –

+0

Exacty, но это не очень важно ... Я добавил опору для '<Отправить форму = 'myForm' />', но я не знаю, как я могу получить ее значение из тела компонента submit (см. мой обновленный код). –

Смежные вопросы