2017-08-08 61 views
7

我有一個終極版形式,我嘗試初始化使用initialValues形式。考慮下面的代碼,形式不被填充名稱或年齡:終極版形式initialValues被創建爲地圖

const EmployeesForm = reduxForm({ 
    form: 'addEmployee', 
    enableReinitialize: true 
})(EmployeesFormComponent) 

export default connect((state, ownProps) => { 
    const initialValues = { name: 'Jason', age: 24 } 
    return { 
    initialValues: initialValues 
    } 
})(EmployeesForm) 

不過是在Web開發者控制檯上檢查的Redux的時候next state,我可以看到form.valuesform.initial都是地圖擁有這些initialValue值的對象。

enter image description here

我應該如何改造對象,以便它的「突然發作」到表單中。 BTW我使用:import { Field, reduxForm } from 'redux-form/immutable'和它的終極版形式6.8.0。

+1

至於我可以看到你的代碼看起來很好,實際上它在這個沙箱的工作原理:https://codesandbox.io/s/6xnrvwx3mn。也許問題在你的代碼中的其他地方?你能準備一個能重現問題的沙箱嗎? – Dario

回答

1

這可能是你的反應,機字段定義的問題。

<Field name="name" component={TextInput} /> 
<Field name="age" component={TextInput} /> 

確保這是您的表單的正確定義。如果您可以添加組件標記,那麼它將變得很容易調試。

此外,在反應母語與終極版,形成一個更棘手的部分是onChangeText回調代替的onChange所以爲了考慮到,你必須創建周圍的反應本地TextInput組件的包裝

const TextInputNative = ({ input: { onChange, ...inputProps }}) => { 
    return <TextInput onChangeText={onChange} 
      {...inputProps} /> 
} 

const EmployeesFormComponent =() => (
     <Field name="name" component={TextInputNative} /> 
     <Field name="age" component={TextInputNative} /> 
); 

這也可能是阻止您的形式從初始值得到更新。

0

至於immutableJS的話,你應該能夠通過使用yourMap.toJS()

讓你initialValue作爲對象,但你不必爲你的地圖手動轉換爲對象,因爲它是由redux-form/immutable照顧,並按照終極版形式的文檔

當您使用終極版形式的不變的版本,即終極版形式的值給你確認和提交將處於Immutable.Map

在你不需要一成不變的地圖和所有的爵士樂情況下,我建議你去非一成不變版本reduxform的。