2017-05-24 16 views
0
//first.reducer.ts 
export function firstReducer(state: number = 0, action: actions.actionsForFirst): number{ 
    console.log("firstReducer") 
    console.log(action) 
    switch(action.type) { 
     ... 
     return state; 
    }   
} 

//second.reducer.ts 
export function secondReducer(state: string = "qwe", action: actions.actionsForSecond): string { 
    console.log("secondReducer") 
    console.log(action) 
    switch(action.type) { 
     ... 
     return state; 
    }   
} 

//store.module.ts 
    const reducers = { firstReducer, secondReducer }; 
    @NgModule({ 
     imports: [ 
      StoreModule.provideStore(reducers), //import reducers 
     ], 
     ... 
    }) 
    export class StoreModule { }; 

//app.module.ts 
import { StoreModule } from '@ngrx/store'; 
import { CoreStoreModule } from './core-store.module'; // module with reducers 
@NgModule({ 
    bootstrap: [AppComponent], 
    imports: [ 
     CoreStoreModule, 
     effects.map(effect => EffectsModule.run(effect)) //register some imported effects 
    ], 
    ... 
}) 
export class AppModule { } 

日誌輸出:NGRX:初始動作燒製兩次減速器

firstReducer對象類型: 「@ NGRX /存儲/初始化」 :對象

secondReducer對象類型:「@ NGRX /存儲/初始化」 :對象

firstReducer對象類型: 「@ NGRX /存儲/初始化」 :對象

secondReducer對象類型: 「@ NGRX /存儲/初始化」 :對象

即@ NGRX /存儲/初始化動作是爲兩個firstReducer和secondReducer燒製兩次。

這是什麼原因造成的?有the open issue

+1

你希望得到什麼樣的答案?你所鏈接的GitHub問題有一個[來自作者之一的評論](https://github.com/ngrx/store/issues/280#issuecomment-280651314),稱你「應該只在你的商店中提供商店根AppModule的導入「。在[本期](https://github.com/ngrx/store/issues/281)中討論將商店放入功能模塊中。我的理解是,它尚未得到支持。 – cartant

回答

0

在商店模塊中,您初始商店與StoreModule.provideStore(reducers)。然後你在主模塊中導入了商店模塊。它使它初始化兩次。您只能在主模塊中添加StoreModule.provideStore(reducers)