如何以redux格式传递动态表单名称?

时间:2016-11-09 14:49:25

标签: javascript reactjs redux redux-form

我试图使用此代码将动态表单名称传递给reduxForm。

以下是我找到的代码:

let FormAddress = compose(connect((state, props) => ({form: props.form})), reduxForm({destroyOnUnmount: false, asyncBlurFields: []}))(ValidationForm);

从这篇文章: https://github.com/erikras/redux-form/issues/603#issuecomment-254271319

但我不确定最新情况。

这就是我目前的做法:

const formName = 'shippingAddress';
const form = reduxForm({
  form: formName
});

export default connect(mapStateToProps)(CityStateZip);

但我希望能够使用道具传递它,例如:

const formName = 'shippingAddress';
const form = reduxForm({
  form: props.form
  // validate
});

export default connect(mapStateToProps)(CityStateZip);

但是当我尝试时,它会抱怨它不知道道具是什么 - 因为我认为它超出了上述功能的范围。

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:23)

调用FormAddress组件的父组件应该在道具中发送表单的名称为props.form

var formId="SomeId"
<FormAddress form={formId} />

// and in your FormAddress component have 
const form = reduxForm({
  //no need to put form again here as we are sending form props.
});

这适合我。

答案 1 :(得分:16)

该代码段基本上使用compose库中的redux函数。这是你可以尝试的东西......

<FormAddress name="shippingAddress" />

所以在你的components/FormAddress.js文件中

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

class FormAddress extends React.Component { ... }

const mapStateToProps = (state, ownProps) => {
    return {
        form: ownProps.name,
        // other props...
    }
}

export default compose(
    connect(mapStateToProps),
    reduxForm({
        //other redux-form options...
    })
)(FormAddress);

希望这有帮助!