2016-10-18 4 views
0
未定義

に設定されたプロパティ、私は次のような単純な減速combineReducerは

let reducer = (prevState = {}, action) => { 
    return { 
     A: A(prevState.A, action), 
     B: B(prevState.B, action) 
    } 
}; 
let A = B = (prevState, action) => { 
    if (action.type == 'foo') 
     return 'bar'; 
    else 
     return prevState; 
}; 

どれ行動、特に@@ INITを持っている想像し、私の状態が{A: undefined, B: undefined}になることになりますが発生します。これは理想的ではありません。なぜなら私の状態は依然として{}です。

私はcombineReducerパターンに従っているので、これは起こっています。とにかくこれを回避するには?

+0

レデューサーは未定義の初期状態を持っていなければなりません。そうでなければあなたは次のようになります: "Reducer" ... "は初期化中に未定義で返されました。初期状態は未定義ではないかもしれません。 "だから、どこかであなたのコメントで提案したように、空のような初期状態にしたいなら、nullのようなものを使うことに沸きます。 – WTK

答えて

1

還元剤は、prevStateの初期状態値を提供していません。したがって、最初にA()またはB()が実行されると、prevStateは未定義となり、返されます。

Reduxドキュメントの新しい"Structuring Reducers"セクションは、"Initializing State"ガイドでこれをカバーしています。

+0

彼らの初期値は "欠けている"、存在しないはずです。 'A(prevState = null)' 'B(prevState = -1)'のような仮定をどこにでも加えなければならないということですか?これらのプロパティーには「初期値」はありません。 – Boyang

+0

初期値を指定する必要はありません。しかし、あなたが何か別のものをしなければ、今は '{A:undefined、B:undefined}'を得るつもりです。 – markerikson