Also arbeite ich an einer großen react/redux app und bin sehr glücklich darüber, wie einfach es ist, redux zu verwalten. Wir verwenden einen "Enten" -Stil-Ansatz für Reducer/Action/Action Creators, um die Dinge relativ domänenbasiert zu halten. Darüber hinaus versuchen wir, den Status ui mit der Domain zu verknüpfen, und die meisten Reducer haben eine ähnliche Struktur. Es sieht etwa so aus:Wiederverwendung von Aktionen über mehrere Reducer in redux
export default function home(state = initialState, action = {}) {
switch (action.type) {
case OPEN:
return {
...state,
ui: {
...state.ui,
[action.key]: true
}
};
case CLOSE:
return {
...state,
ui: {
...state.ui,
[action.key]: false
}
};
case SELECT_TAB:
return {
...state,
ui: {
selectedTab: action.selected
}
};
default:
return state;
}
}
wir die gleichen Aktionen über wiederholte am Ende mit und über die ui, hauptsächlich schaltet und Einstellung, was angezeigt wird. Gibt es eine Möglichkeit, die Domain-basierte UI in einem Reducer zu halten, ohne die OPEN
und CLOSE
Anweisungen für die Ui in jedem Reducer hinzufügen zu müssen. Vielleicht denke ich an ein Anti-Pattern in Redux, aber neugierig, ob jemand schon einmal auf diese Art von Problem gestoßen ist?
UPDATE:
Ich mag die Lösung unten aufgeführt, aber wie würden Sie die Minderer erweitern, um eine Art von ui Minderer in ihm enthalten.
Auf diese Weise können Sie Domain-basierte UI geschachtelt haben, ohne alle Aktionen zu wiederholen. Sie sind sich nicht sicher, wie Sie das machen würden, weil Sie CASE-Anweisungen im Wesentlichen dynamisch hinzufügen würden.
Danke für die Antwort, aber ich habe schon Jede Aktion Namespaced wie 'const OPEN = 'if-Planung/home/OPEN';' Ich denke, was ich nicht ganz bekomme, ist, selbst wenn ich eine Hilfsfunktion hatte, die eine Reihe von Standard-ui-Aktionen hatte. Wo würde ich es in das Original Reducer legen? –
@PhilipChmalts checken Sie die Bearbeitungen .. so würde ich es verwenden .. – webdeb
So nah, aber nicht genau das Problem der anderen Aktionen in der Heimat Reducer überprüfen Sie meine Bearbeitung bei dem, was ich versuche zu erreichen . –