【发布时间】:2016-09-27 17:01:49
【问题描述】:
我有一个Fields 组件,我有时尝试单独使用它,有时从FieldArray 组件内部使用它。我在下面添加了一个带有简化模型的 sn-p。
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' ]
}
当我在FieldArray 组件中使用Fields 组件时,renderSharedComponent 内部的fields 参数具有以下形式:
{
hashes: [
{
value: { input: {...}, meta: {...} },
valueIsRegex: { input: {...}, meta: {...} }
}
],
names: [ 'hashes[0].value' , 'hashes[0].valueIsRegex' ]
}
如果我将在 FieldArray 组件中使用具有不同名称(比如 paths)的 Fields 组件,则名称属性将相应更改(例如 names: [ 'paths[0].value' , 'paths[0].valueIsRegex' ])。
我正在尝试以通用方式获取 value 和 valueIsRegex 对象,以支持我上面介绍的任何情况。
现在我已经创建了一个函数,我使用 RegEx 来确定字段。但我想知道是否有人知道更好的方法来做到这一点(也许有一个 Redux Form 工具,我在阅读文档时可能错过了)。
【问题讨论】:
标签: redux-form