2017-08-25 18 views
0

現在、状態管理にngrxストア(v。4.0.3)を使用しています。それは素晴らしいプロジェクトのようです。ngrx(v。4.x)ストアの状態を初期化できません

私の店の状態を初期化しようとしている間に、私は道のりで少しぶつかりました。 documentationはかなりシンプルに見えますが、私はどこに間違っているのか分かりません。

export const UPDATE = 'UPDATE'; 

export class UpdateSearchTextAction implements Action { 
    readonly type: string = UPDATE; 
    constructor(public readonly text: string) {} 
} 

export function searchTextReducer(state: string, action: UpdateSearchTextAction) { 
    switch(action.type) { 
     case UPDATE: 
     return action.text; 
    } 
}; 

app.module.ts

で検索-text.reducer.tsでapp.state.ts

export interface AppState { 
    searchText: string; 
} 

ここでは、関連するコードスニペットです

export const reducers: ActionReducerMap<AppState, UpdateSearchTextAction> = { 
    searchText: searchTextReducer 
}; 

export const initialState: InitialState<AppState> = { 
    searchText: 'sds' 
}; 

.... 

imports: [ 
.... 
StoreModule.forRoot(reducers, initialState) 
] 

いくつかの成分私は入力を開始すると、まだ私は、

value = [undefined] 

後で見る

value = [sds] 

:トン

constructor(private store: Store<AppState>) { 
    this.searchBoxText = store.select('searchText'); 
    this.searchBoxText.subscribe(text => console.log('value = [' + text + "]")); 
} 

ので、ときに、アプリケーションのロード、私は、コンソールにログインして以下を参照してくださいことを期待しますUpdateSearchTextActionをトリガーする入力では、コンソールは実際に正しい値を記録します。だから私は店を正しくセットアップしたようだ。

本当にシンプルなものがあります。誰も助言を提供できますか?

答えて

0
あなたは readonlyとしてそれを持っているので、あなたが値を代入することはできません

export class UpdateSearchTextAction implements Action { 
    readonly type: string = UPDATE; 
    constructor(public text: string) {} 
} 

、あなたはデフォルト値を指定する必要があります

this.store.dispatch(new UpdateSearchTextAction.UPDATE(<<string>>)); 
+0

あなたの提案は、私がすでにやっていることですが、ユーザーの入力に応じてのみです。私が理解しようとしているのは、ActionをディスパッチせずにAppStateの初期状態を設定する方法です。 StoreModule.forRootのシグネチャには減速器とStoreConfigが必要です(状態を初期化するために使用できると仮定しています)、私は迷っています。私が望まないのは、ストア内のすべての状態が未定義で初期化されているということです。 –

0

dispatch文を使用して値を派遣する必要がありますstate引数の場合、アクションが一致しない場合は同じ状態を返します。減速機を次のように変更してみてください:

関連する問題