Ich habe einen Reduzierer, der für die Suche verwendet und festgestellt, dass es für mehrere nicht verwandte Suchkomponenten verwendet werden muss. Als ich die Redux-Dokumentation durchblätterte, fand ich das Konzept der Reduktoren höherer Ordnung (http://redux.js.org/docs/recipes/reducers/ReusingReducerLogic.html#customizing-behavior-with-higher-order-reducers) (Meta-Reduzierungen in ngrx) und benutzte das, um 2 'Instanzen' meines Suchreduzierers zu erstellen. Ich fand dann in der gleichen Dokumentation, dass dies scheint, mit Selektoren zu arbeiten, aber tatsächlich ein Problem mit der Memoisierung (http://redux.js.org/docs/recipes/ComputingDerivedData.html#accessing-react-props-in-selectors) hat. Dieser Artikel verweist auf eine Funktion namens "mapStateToProps", die reaktionsspezifisch zu sein scheint, um die Geschäftsdaten mit Komponenten zu verbinden (wenn ich es richtig verstehe ...).Wähler für mehrere Instanzen von NGRX-Reduzierern
Gibt es eine Entsprechung in ngrx oder gibt es eine andere Möglichkeit, diese Selektoren zu erstellen, um mit den verschiedenen Instanzen der Reduzierungen zu arbeiten?
Unten finden Sie eine leicht konstruiertes Beispiel basierend auf dem NGRX Beispiel app von dem, was ich zu tun versuche:
Reduzierungen/searchReducer.ts:
export interface State {
ids: string[];
loading: boolean;
query: string;
};
const initialState: State = {
ids: [],
loading: false,
query: ''
};
export const createSearchReducer = (instanceName: string) => {
return (state = initialState, action: actions.Actions): State => {
const {name} = action; // Use this name to differentiate instances when dispatching an action.
if(name !== instanceName) return state;
switch (action.type) {
//...
}
}
}
Minderer/index.ts:
export interface State {
search: fromSearch.State;
}
const reducers = {
search: combineReducers({
books: searchReducer.createReducer('books'),
magazines: searchReducer.createReducer('magazines')
}),
}
export const getSearchState = (state: State) => state.search;
// (1)
export const getSearchIds = createSelector(getSearchState, fromSearch.getIds);
glaube ich, die getSearchIds Wähler über die Fähigkeit benötigt Irgendwie um zu spezifizieren, auf welche Instanz der Suche der Reducer zugreift. (Seltsamerweise in meinem Code scheint zu funktionieren, aber ich bin mir nicht sicher, wie es weiß, aus welchen auszuwählen und ich nehme an, es hat das Memo-Problem in der Redux-Dokumentation diskutiert).
Können Sie auf Ihre Antwort erweitern weiteren Schalter Fall machen? Es klingt, als ob Sie beabsichtigen, doppelte Eigenschaften der State-Schnittstelle zu erstellen. Aber das hört sich DRY nicht an, doppelte Eigenschaften zu erzeugen und denselben Kabeljau in verschiedenen Schalteranweisungen zu verwenden. – Mike
Ich denke, es wäre besser, eine zusätzliche Eigenschaft innerhalb eines Reduzierers zu haben, anstatt einen zusätzlichen Reduzierer – Kevin