redux 環境でメモ化されたセレクターに reselect を使用しています。reselectのreadmeで、これらのセレクターは構成可能であることに注意してください。つまり、あるセレクターを別のセレクターで使用できます。ここに私のセレクターがあります:
import { createSelector } from 'reselect';
const getUser = (state) => state.user;
const getRegions = (state) => state.regions;
const getSelectedRegion = (state) => state.selectedRegion;
const getSeals = (state) => state.seals;
const getSignatures = (state) => state.signatures;
export const userData = createSelector(
[ getUser, getSeals, getSignatures ],
(user, seals, signatures) => {
if(user === null) return user;
user.seals = seals.filter(seal => seal.userEmail === user.email);
user.signatures = signatures.filter(signature => signature.userEmail === user.email);
user.isRoot = user.roles.includes('root');
user.isEngineer = user.roles.includes('engineer');
return user;
}
);
export const sealForSelectedRegion = createSelector(
[ userData, getSelectedRegion ],
(user, selectedRegion) => {
let sealForSelectedRegion = user.seals.find(seal => seal.region === selectedRegion.name);
return sealForSelectedRegion;
}
);
userData
セレクターがセレクターによってどのように使用されるかに注意してくださいsealForSelectedRegion
。userData
ただし、これらのセレクターを使用およびデバッグすると、 whenがトリガーされて新しい出力が生成される場合、 がトリガーされないことが明らかになりましたsealForSelectedRegion
。私の考えでは、入力userData
が更新された結果を生成したため、それをトリガーする必要があり、したがって `sealForSelectedRegion を再計算する必要があります。しかし、これは起こりません。
上記のリンク先の reselect readme にも同様の状況が示されています。私が見ることができる唯一の違いは、readme で構成されているセレクターがエクスポートされていないことです。userData
この例では、エクスポートして、sealForSelectedRegion への入力として使用したいと考えています。
問題は、なぜ not の更新された出力がuserData
トリガーされないのsealForSelectedRegion
かということです。userData
輸出されているからでしょうか。もしそうなら、なぜこれが問題なのですか?