github reduxjs/reselect v5.1.0

latest release: v5.1.1
10 months ago

This minor release:

  • Adds a new createSelector.withTypes<RootState>() and createStructuredSelector.withTypes<RootState>() API
  • Deprecates the TypedStructuredSelectorCreator type introduced in 5.0
  • Aims to reduce false positives in identityFunctionCheck by only running if the output selector is passed one argument
  • Fixes a bug with weakMapMemoize's resultEqualityCheck when used with a primitive result.

withTypes

Most commonly, selectors will accept the root state of a Redux store as their first argument. withTypes allows you to specify what that first argument will be ahead of creating the selector, meaning it doesn't have to be specified.

// previously
export const selectPostById = createSelector(
  [
    (state: RootState) => state.posts.entities,
    (state: RootState, id: number) => id,
  ],
  (entities, id) => entities[id],
);
// now
export const createAppSelector = createSelector.withTypes<RootState>();

export const selectPostById = createAppSelector(
  [(state) => state.posts.entities, (state, id: number) => id],
  (entities, id) => entities[id],
);

Known limitations

Due to a Typescript issue, inference of the output selector's parameters only works with withTypes when using an array of input selectors.

If using the variadic version, you can either wrap your input selectors in an array instance (as above), or annotate the parameters manually.

export const createAppSelector = createSelector.withTypes<RootState>();

export const selectPostById = createAppSelector(
  (state) => state.posts.entities, 
  (state, id: number) => id,
  // parameters cannot be inferred, so need annotating
  (entities: Record<number, Post>, id: number) => entities[id],
);

What's Changed

New Contributors

Full Changelog: v5.0.1...v5.1.0

Don't miss a new reselect release

NewReleases is sending notifications on new releases.