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

jru*_*ter 21 javascript reactjs redux redux-form

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

这是我找到的代码:

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

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

但我不确定最新情况.

这就是我目前正在做的事情:

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

export default connect(mapStateToProps)(CityStateZip);
Run Code Online (Sandbox Code Playgroud)

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

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

export default connect(mapStateToProps)(CityStateZip);
Run Code Online (Sandbox Code Playgroud)

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

有人能帮我吗?

Par*_*nde 26

调用FormAddress组件的父组件应该在props中发送表单的名称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.
});
Run Code Online (Sandbox Code Playgroud)

这适合我.

  • 为我完美工作,谢谢! (3认同)

jpd*_*rre 19

该片段基本上使用了库中的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);
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!