Ita*_*tai 3 javascript redux ngrx angular
声明 ActionReducerMap 中的所有减速器都可以对其做出反应的“INIT_ACTION”的正确方法是什么?
这是我的代码如何的示例,我需要所有 3 个减速器(图像、标签、已添加标签)来对单个操作做出反应:
import { ActionReducerMap, createFeatureSelector } from '@ngrx/store';
import * as fromRoot from '../../../store';
import * as fromImages from './image.reducer';
import * as fromTags from './tag.reducer';
import * as fromAddedTags from './added-tag.reducer';
export interface AnalysisState {
images: fromImages.State;
tags: fromTags.State;
addedTags: fromTags.State;
}
export interface State extends fromRoot.State {
analysis: AnalysisState;
}
export const reducers: ActionReducerMap<AnalysisState> = {
images: fromImages.reducer,
tags: fromTags.reducer,
addedTags: fromAddedTags.reducer
};
export const getAnlysisState = createFeatureSelector<AnalysisState>('analysis');
Run Code Online (Sandbox Code Playgroud)
这是一个示例操作文件:
import { Action } from '@ngrx/store';
import { Tag } from '../../models/tag.model';
export const enum AddedTagActionTypes {
ADD_TAG = '[ANALYSIS] - Add Tag'
}
export class AddTag implements Action {
readonly type = AddedTagActionTypes.ADD_TAG;
constructor(public payload: Tag) {}
}
export type AddedTagActions = AddTag;
Run Code Online (Sandbox Code Playgroud)
这是一个示例减速器:
import { EntityState, EntityAdapter, createEntityAdapter } from '@ngrx/entity';
import * as fromAddedTag from '../actions/added-tag.actions';
import { Tag } from '../../models/tag.model';
export interface State extends EntityState<Tag> {}
export const adapter: EntityAdapter<Tag> = createEntityAdapter<Tag>({
selectId: tag => tag.id
});
export const initialState: State = adapter.getInitialState({});
export function reducer(state = initialState, action: fromAddedTag.AddedTagActions): State {
switch (action.type) {
case fromAddedTag.AddedTagActionTypes.ADD_TAG: {
return adapter.addOne(action.payload, state);
}
default: {
return state;
}
}
}
const { selectIds, selectEntities, selectAll, selectTotal } = adapter.getSelectors();
export const getAllAddedTags = selectAll;
Run Code Online (Sandbox Code Playgroud)
一个动作通过所有的减速器。因此,如果您只是在所有 3 个减速器中为该操作添加一个 case 语句,那么它将命中所有 3 个 case 语句。
如果在 reducer 中没有针对特定操作的 case 语句,则将触发默认的 case 语句,该语句仅返回原始状态,保持不变。
这假设您不是延迟加载减速器。减速器当然只有在加载时才会被触发。
| 归档时间: |
|
| 查看次数: |
465 次 |
| 最近记录: |