我嘗試查找此方案的最佳做法,但找不到。ngrx/reducex操作環境的最佳做法
問題: 我不想再重複動作的文件,就像在我的例子 家todos.actions和運動待辦事項-行動,我想用同樣的對dos.action文件。和相同的減速器。
例如: 我寫例如待辦事項應用程序,在這個例子中,你可以看到這個問題,如果我派遣一個行動型「ADD_TODO_ASYNC」,它會在家裏(效果和減速機)派遣,和運動(效果減速機)
todos.actions.ts
const ADD_TODO_ASYNC = 'ADD TODO ASYNC';
const ADD_TODO_COMPLETE = 'ADD TODO COMPLETE';
const ADD_TODO_FAILD = 'AD TODO FAILD';
class addTodoComplete {
type = ADD_TODO_COMPLETE;
}
class addTodoFaild {
type = ADD_TODO_COMPLETE;
}
export type Actions = addTodoComplete | addTodoFaild;
sport.effects.ts
@Injectable()
export class SportTodosService {
@Effect() ADD_TODO_ASYNC$ = this.actions$.ofType(TodosActionTypes.ADD_TODO_ASYNC)
.map(toPayload)
.swithMap((todo: Todo) => this.api.addTodo(todo))
.map((todo: Todo) => TodosActionTypes.addTodoComplete(todo))
constructor(
private actions$: Actions,
private api: api
) { }
}
個home.effects.ts
export class HomeTodosService {
@Effect() ADD_TODO_ASYNC$ = this.actions$.ofType(TodosActionTypes.ADD_TODO_ASYNC)
...
constructor(
...
) { }
}
減速
function todosReducer(state, action: TodosActionTypes.Actions) {
switch (action.type) {
case TodosActionTypes.ADD_TODO_COMPLETE:
return state;
default:
return state;
}
}
app.module.ts
@NgModule({
declarations: [
AppComponent
],
imports: [
StoreModule.forRoot({
sport: todosReducer,
home: todosReducer,
}),
EffectsModule.forRoot([
SportTodosService
HomeTodosService,
])
],
providers: [
api
],
bootstrap: [AppComponent]
})
export class AppModule { }
我試着去了解什麼是此方案的最佳實踐? 用「HOME_ADD_TODO」&'SPORT_ADD_TODO'等上下文編寫動作?
還是有官方的方式?
,如果你知道解決辦法,如果該解決方案是終極版,不關心或NGRX
感謝所有
我知道名稱間距,但我填寫,如果我有我的應用程序中的10個主題待辦事項我會複製過去相同的操作? 和你的解決方案,我將如何處理它在一個reducer? – Alin
我想你不明白我的問題!因爲在你的方式,我需要寫減速器和行動兩次 – Alin