3

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セレクターがセレクターによってどのように使用されるかに注意してくださいsealForSelectedRegionuserDataただし、これらのセレクターを使用およびデバッグすると、 whenがトリガーされて新しい出力が生成される場合、 がトリガーされないことが明らかになりましたsealForSelectedRegion。私の考えでは、入力userDataが更新された結果を生成したため、それをトリガーする必要があり、したがって `sealForSelectedRegion を再計算する必要があります。しかし、これは起こりません。

上記のリンク先の reselect readme にも同様の状況が示されています。私が見ることができる唯一の違いは、readme で構成されているセレクターがエクスポートされていないことです。userDataこの例では、エクスポートして、sealForSelectedRegion への入力として使用したいと考えています。

問題は、なぜ not の更新された出力がuserDataトリガーされないのsealForSelectedRegionかということです。userData輸出されているからでしょうか。もしそうなら、なぜこれが問題なのですか?

4

0 に答える 0