reduxjs / reselect

Selector library for Redux
MIT License
19.03k stars 672 forks source link

Equivalent implementation of re-reselect for cache-key #579

Open gamegee opened 2 years ago

gamegee commented 2 years ago

Hi, this is more a question than a real issue.

I am not sure how I should implement reselect to have the same behavior as re-reselect with the cache-key.

Here is a simple example of a selector that may be used a lot of time in my app, so I want to prevent any re-computation of myExpensiveComputation if the selectBookById has no changed.

In re-reselect

import createCachedSelector from 're-reselect'

const selectBookById = (state, id: string) => state.books[id]
const myExpensiveComputation = () => // stuff

const myCachedSelector = createCachedSelector(
  selectBookById,
  myExpensiveComputation
)((_, id) => id)) // here is the cache key

In reselect 4.1.0

import { createSelector } from 'reselect'

const selectBookById = (state, id: string) => state.books[id]
const myExpensiveComputation = () => // stuff

const myCachedSelector = createSelector(
  selectBookById,
  myExpensiveComputation,
  {
    memoizeOptions: {
      maxSize: 50, // Set size to 50, so if multiple components are connected to the same selector, it will not recompute
    }
  }
)
aryaemami59 commented 5 months ago

I believe this one has been resolved by #649, due to weakMapMemoize providing an effectively infinite cache size out of the box.