我有一個Fields
組件,我有時嘗試單獨使用它,有時還會使用FieldArray
組件。我在下面添加了一個簡化模型片段。FieldArray組件中Redux Form Fields組件的使用
import React from 'react';
import ReactDOM from 'react-dom';
import { createStore, combineReducers } from 'redux';
import { Provider } from 'react-redux';
import { reduxForm, Fields, FieldArray, reducer as formReducer } from 'redux-form';
const reducers = {
form: formReducer
};
const reducer = combineReducers(reducers);
const store = createStore(reducer);
const renderSharedComponent = (fields) => {
console.log(fields);
return (<div>Shared Component</div>);
};
const renderHashes = ({ fields }) => (
<div>
{
fields.map((field) => (
<Fields
key={ field }
names={ [`${field}.value`, `${field}.valueIsRegex`] }
component={ renderSharedComponent }
/>
))
}
</div>
);
const ReactComponent =() => (
<div>
<FieldArray
name="hashes"
component={ renderHashes }
/>
<Fields
names={ ['value', 'valueIsRegex'] }
component={ renderSharedComponent }
/>
</div>
);
const ReduxForm = reduxForm({
form: 'default',
initialValues: {
hashes: [{}]
}
})(ReactComponent);
ReactDOM.render((
<div>
<Provider store={ store }>
<ReduxForm />
</Provider>
</div>
), document.getElementById('content'));
當我本身使用Fields
部件,從內renderSharedComponent
的fields
參數具有以下形式:
{
value: { input: {...}, meta: {...} },
valueIsRegex: { input: {...}, meta: {...} },
names: [ 'value' , 'valueIsRegex' ]
}
當我使用Fields
成分的FieldArray
組件內,從內部的fields
參數renderSharedComponent
具有以下形式:
{
hashes: [
{
value: { input: {...}, meta: {...} },
valueIsRegex: { input: {...}, meta: {...} }
}
],
names: [ 'hashes[0].value' , 'hashes[0].valueIsRegex' ]
}
如果我將在名稱不同的FieldArray
組件中使用Fields
組件(假設名稱爲paths
),則名稱屬性將相應更改(例如, names: [ 'paths[0].value' , 'paths[0].valueIsRegex' ]
)。
我試圖以一種通用的方式獲取value
和valueIsRegex
對象,以支持上面介紹的任何情況。
現在我創建了一個函數,我使用RegEx來確定字段。但是我想知道是否有人知道更好的方法來做到這一點(也許有一個Redux表單實用程序,可能我錯過了閱讀文檔時)。