Wenn eine Liste von Benutzern vorhanden ist und jeder Eintrag einen Button »EDIT« hat. Wenn der Benutzer darauf klickt, geschieht folgendes:React/Redux-Individual state für jede Instanz einer Komponente
- Anfrage der Server für das Formular
- Komponente hinzufügen
<UserEditForm />
dem Eintrag, was erweitert den Eintrag
Das bis auf eine Sache gut funktioniert: Wenn man auf weitere Schaltflächen klickt, erhält jede Instanz des Formulars die Daten des zuletzt angeforderten Benutzerformulars. Das liegt daran, dass ich nur eine userform
Eigenschaft in dem Zustand habe.
Also, diese zu lösen ich userform
zu userforms
austauschen möchten, die sollten/ein Objekt wie das sein könnte:
userforms: {
<id of first instance>: { … }, //formdata
<id of second instance>: { … },
…
}
Aber da ich bin neu in React/Redux Ich weiß nicht wirklich, wie das zu tun oder was der »richtige« Ansatz oder die beste Vorgehensweise ist, um es tatsächlich zu tun.
Meine Idee ist wie so eine höhere Ordnung Komponente zu erstellen:
import React from 'react';
import {connect} from 'react-redux';
import {uuid} from '../../helpers/uuid';
export const formdatainstance = (FormInstance) => {
let id = null;
class FormDataMapper extends React.Component {
constructor (props) {
super(props);
id = uuid();
}
render() {
//extract the formdata from the state
//using the id
return <FormInstance { ...this.props } />
}
}
const mapStateToProps = (state) => {
console.log(id); //is null for one run
return {
userforms: state.userforms
};
};
return connect(mapStateToProps)(FormDataMapper);
}
So in der List-Komponente ich kann:
import UserEditForm from './UserEditForm';
import {formdatainstance} from './formdatainstance';
const MappedUserEditForm = formdatainstance(UserEditForm);
class List extends React.Component {
render(){
return (
{users.map(user => {
//more stuff
<MappedUserEditForm />
//more stuff
})}
);
}
}
Also meine Frage: Ist das eine gute Idee? Wenn ja, was wäre der richtige Weg, um die Bereinigung durchzuführen, wenn also im Lebenszyklus der Komponente sollte ich die Daten aus dem Zustand löschen? Gibt es eine andere Möglichkeit, das zu tun, die einfacher ist?
Danke für Hilfe!
tun Sie mehrere Formulardaten behalten möchten (für jeder Benutzer) in dem Staat? Oder würde es ausreichen, dass Sie ein Zustandsobjekt für Formulardaten haben, das von einem Benutzer gefüllt und zurückgesetzt wird, wenn Sie für einen anderen Benutzer auf BEARBEITEN klicken? Könnten Sie auch relevanten Code von Ihrem Reducer posten? –
Ich möchte eindeutige Formulardaten für jede Instanz eines gerenderten Formulars haben. Wenn also drei Benutzer in der Liste sind, möchte ich am Ende drei Formulare mit den Daten für jeden Benutzer anzeigen, die einzeln bearbeitet und eingereicht werden können. – philipp
Ich wäre auch nett, diese Funktionalität zu abstrahieren, so dass sie auf andere Komponenten angewendet werden kann, die ein anderes Formular für andere Entitäten im System darstellen. – philipp