Selector patterns
When To Use
- Implement / add / create a Redux selector
- Update / change / refactor an existing selector
- Questions about selectors,
useSelector,createSelector,createDeepEqualSelector,reselect,app/selectors, orbackgroundState
Version-gated flag selectors (validatedVersionGatedFeatureFlag, selectRemoteFeatureFlags, app/selectors/featureFlagController/) → feature-flags.
Memoization audits of existing selectors (broken identity, cascade re-renders) → performance.
Workflow
Q&A: answer from the overlay, then stop.
Implement or update:
- Search for an existing named selector before adding one.
- Put new selectors in
app/selectors/<feature>.ts(or the feature’sselectors/folder). - Add a leaf input selector that reads the controller slice. Compose derived selectors on top of it.
- Narrow the input to the smallest slice. Choose
createSelector(primitive output) orcreateDeepEqualSelector(object / array when the narrowed input still churns and the payload is small enough to compare). - Name it
select<Feature><Thing>. - In components and hooks, call
useSelector(selectX)with that named selector. - Add collocated unit tests with at least two state variants.