Ich bin für die beste Praxis Ansatz suchen redux Zustand insbesondere Fall verwalten:Wie kann man den Redux-Zustand richtig verwalten?
ich eine Anwendung für die Bearbeitung Beiträge mit Content-Editor haben, sieht Anwendungszustand wie folgt aus:
{
posts: [
{
id: 123,
blocks: [
{
setting1: 'fuzz',
setting2: 'bar',
...
}
],
...
},
...
],
activeBlock: {
setting1: 'fuzz',
setting2: 'bar',
...
}
}
Es ist eigentlich ein Staatsstruktur, zu der ich kommen möchte.
Zu dieser Zeit habe ich die folgende Struktur haben:
{
posts: [
{
id: 123,
activeBlockIndex: 0,
blocks: [
{
setting1: 'fuzz',
setting2: 'bar',
...
}
],
...
},
...
]
}
Und ich habe eine gemeinsame Minderer für Beiträge und Inhaltsblöcke. Und es ist wichtig zu erwähnen, dass Content Editor
Komponente sehr komplex ist und so viele tief in Kind Komponenten geht. Es scheint in Ordnung zu sein und es funktioniert .. Aber Ich habe ein Problem: Ich muss so viele Informationen über Beiträge, in den Content Editor
's Komponenten angeben, z. B .: PostId, BlockIndex. Ich denke, es ist nicht so gut, denn Hauptverantwortung der Content Editor
Komponente ist es nur - Bearbeitung des Inhalts, egal wo es gespeichert ist.
Ich möchte meine App so refaktorieren Content Editor
's Komponenten enthalten nur für die state.activeBlock
und andere Komponenten zur Verwaltung von Posts und Blöcke nur für state.posts
Referenz enthalten. (erste Variante der Struktur in der Frage)
Mit anderen Worten bin ich auf der Suche nach einer Möglichkeit für die Synchronisierung state.activeBlock
Zweig des Staates state.posts
auf der Ebene der Reducer (oder woanders, ich weiß es nicht).
Ich schätze wirklich jede Ratschläge.
Btw, ist es klar, wovon ich spreche? Oder die Frage sollte detaillierter umgeschrieben werden?
Ja, ich verwende bereits combinateReducers. Vielen Dank für die Erwähnung von mapStateToProps. Ich habe vergessen, dass ich Zugriff auf das gesamte Speicherobjekt innerhalb der mapStateToProps-Funktion habe. Aber ich bin mir nicht sicher. Ist das okay für Synchronisierungskram? – milushov
'mapStateToProps' dient nur zum Verbinden des Status mit Komponenten und nicht zum Festlegen des Status. Wenn Sie _move_ nicht setzen, setting2 usw. in 'activeBlock' einfügen wollen, gibt es keinen Grund, einen doppelten Status zu haben. Sie könnten 'active: true' auf dem aktiven Post in' state.posts' von Ihrem Reducer setzen, dann in 'mapStateToProps' der ContentEditor-Komponente,' let activePost = state.posts.filter (post => post.active) [ 0]; return {post: activePost} '. Dadurch wird die "post" -Ablage in ContentEditor auf den aktiven Beitrag gesetzt und Sie erhalten ihre Einstellungen. – inostia
Alternativ (und wahrscheinlicher) haben Sie die "ID" des Posts, den der Benutzer in der URL bearbeitet, und Sie könnten "Beiträge" nach ID filtern ... – inostia