Ich habe eine Fields
Komponente, die ich manchmal selbst und manchmal von innerhalb einer FieldArray
Komponente zu verwenden versuche. Ich habe unten einen Ausschnitt mit einem vereinfachten Modell hinzugefügt.Verwendung von Redux Form Fields Komponente in einer FieldArray-Komponente
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'));
Wenn ich die Fields
Komponente selbst zu verwenden, das fields
Argument von innen renderSharedComponent
hat die folgende Form:
{
value: { input: {...}, meta: {...} },
valueIsRegex: { input: {...}, meta: {...} },
names: [ 'value' , 'valueIsRegex' ]
}
Wenn ich die Fields
Komponente innerhalb einer FieldArray
Komponente, die fields
Argument von innen renderSharedComponent
hat die folgende Form:
{
hashes: [
{
value: { input: {...}, meta: {...} },
valueIsRegex: { input: {...}, meta: {...} }
}
],
names: [ 'hashes[0].value' , 'hashes[0].valueIsRegex' ]
}
Wenn ich die Fields
Komponente in einer FieldArray
Komponente mit einem anderen Namen (sagen wir paths
) verwenden werde, ändert sich die Eigenschaft names entsprechend (z. B. names: [ 'paths[0].value' , 'paths[0].valueIsRegex' ]
).
Ich versuche, die value
und valueIsRegex
Objekte in einer generischen Weise zu erhalten, die jeden der oben dargestellten Fälle unterstützen wird.
Jetzt habe ich eine Funktion erstellt, wo ich eine RegEx verwenden, um die Felder zu bestimmen. Aber ich frage mich, ob irgendjemand einen besseren Weg kennt, dies zu tun (vielleicht gibt es ein Redux-Formular, das ich vielleicht beim Lesen der Dokumentation übersehen habe).