2016-11-09 60 views
7

我試圖使用此代碼將動態表單名稱傳遞給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); 

但是,當我嘗試它抱怨說它不知道道具是什麼 - 因爲我認爲它超出了上述功能的範圍。

有人可以幫助我嗎?

+1

個人建議在這裏 - 但我已經有更多的成功**不**使用REDX形式。它的功能非常棒,但當你開始需要增加應用程序的複雜性時,它就變得很難了。我知道人們在這方面取得了巨大的成功,但是像這樣的問題在這裏需要花費2秒鐘的時間來完成,如果你不依賴於復原形式... – ajmajmajma

+0

只是想知道我的答案對你有用 – jpdelatorre

回答

9

該代碼片段基本上使用redux庫中的compose函數。這裏的東西,你可以嘗試...

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

希望這有助於!

8

其調用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. 
}); 

這對我的作品。

+2

完美地爲我工作, 謝謝! –