redux-devtools
私はウォークスルーを読んだ:
DevTools で正しく動作するには、リデューサーが純粋で、副作用がない必要があります。たとえば、レデューサーでランダム ID を生成しても、不純で非決定論的になります。代わりに、アクション クリエーターでこれを行います。
これらの言葉は、ランダム値の生成について述べています。しかし、現在の状態に基づいて一意の値を取得するのはどうですか? たとえば、データを現在の状態に格納するときに、配列の長さを要素の ID として取得します。配列の値を削除しない限り、一意であることが保証されます。これは関数を不純にしますか?
または、次のように現在の状態に基づいて条件値を作成します。
function reducer (state, action) {
if (state.isLocked) return state;
// calculate further
}
または、より極端に、次のような関数内にのみ存在する定義済みの値を持つことによって:
{ type: 'CREATE_USER', age: 13 }
// it is predictable, always return the same value with same argument
function getAgeText(age) {
if (age < 5) return 'baby';
if (age < 20) return 'teenager';
if (age < 30) return 'mature';
if (age < 40) return 'old';
if (age < 50) return 'very old';
return 'astounding';
} // of course by assuming we have to use this function in case you
// ask, "Why don't get those values anywhere else and not in
// this reducer?"
function reducer (state, action) {
switch (action.type) {
case 'CREATE_USER':
return Object.assign({}, state, {
age: age, ageText: getAgeText(action.age)
});
default:
return state;
}
}
では、これらの例は関数を不純なものにしていますか? そうでない場合、渡された値 (状態とアクション) からのみ実行された場合でも、長くて複雑な計算または重くネストされたレデューサーを作成することは、redux で悪い習慣ですか?