createSelectorCreator
Accepts either a memoize function and ...memoizeOptions rest parameter, or since 5.0.0 an options object containing a memoize function and creates a custom selector creator function.
Parameters (since 5.0.0)
| Name | Description |
|---|---|
options | An options object containing the memoize function responsible for memoizing the resultFunc inside createSelector (e.g., lruMemoize or weakMapMemoize). It also provides additional options for customizing memoization. While the memoize property is mandatory, the rest are optional. |
options.argsMemoize? | The optional memoize function that is used to memoize the arguments passed into the output selector generated by createSelector (e.g., lruMemoize or weakMapMemoize). Default = lruMemoize before 5.0.0 and weakMapMemoize after |
options.argsMemoizeOptions? | Optional configuration options for the argsMemoize function. These options are passed to the argsMemoize function as the second argument. since 5.0.0 |
options.inputStabilityCheck? | Overrides the global input stability check for the selector. Possible values are: once - Run only the first time the selector is called. always - Run every time the selector is called. never - Never run the input stability check. Default = 'once' since 5.0.0 |
options.memoize | The memoize function that is used to memoize the resultFunc inside createSelector (e.g., lruMemoize or weakMapMemoize). since 5.0.0 |
options.memoizeOptions? | Optional configuration options for the memoize function. These options are passed to the memoize function as the second argument. since 5.0.0 |
Parameters
| Name | Description |
|---|---|
memoize | The memoize function responsible for memoizing the resultFunc inside createSelector (e.g., lruMemoize or weakMapMemoize). |
...memoizeOptionsFromArgs | Optional configuration options for the memoization function. These options are then passed to the memoize function as the second argument onwards. |
Returns
A customized createSelector function.
Type Parameters
| Name | Description |
|---|---|
MemoizeFunction | The type of the memoize function that is used to memoize the resultFunc inside createSelector (e.g., lruMemoize or weakMapMemoize). |
ArgsMemoizeFunction | The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by createSelector (e.g., lruMemoize or weakMapMemoize). If none is explicitly provided, lruMemoize will be used. |
Examples
Using options (since 5.0.0)
const customCreateSelector = createSelectorCreator({
memoize: customMemoize, // Function to be used to memoize `resultFunc`
memoizeOptions: [memoizeOption1, memoizeOption2], // Options passed to `customMemoize` as the second argument onwards
argsMemoize: customArgsMemoize, // Function to be used to memoize the selector's arguments
argsMemoizeOptions: [argsMemoizeOption1, argsMemoizeOption2], // Options passed to `customArgsMemoize` as the second argument onwards
})
const customSelector = customCreateSelector(
[inputSelector1, inputSelector2],
resultFunc, // `resultFunc` will be passed as the first argument to `customMemoize`
)
customSelector(
...selectorArgs, // Will be memoized by `customArgsMemoize`
)
Using memoize and ...memoizeOptions
createSelectorCreator can be used to make a customized version of createSelector.
The memoize argument is a memoization function to replace the default configured memoizer (normally weakMapMemoize).
The ...memoizeOptions rest parameters are zero or more configuration options to be passed to memoizeFunc. The selectors resultFunc is passed as the first argument to memoize and the memoizeOptions are passed as the second argument onwards:
const customSelectorCreator = createSelectorCreator(
customMemoize, // Function to be used to memoize `resultFunc`
option1, // `option1` will be passed as second argument to `customMemoize`
option2, // `option2` will be passed as third argument to `customMemoize`
option3, // `option3` will be passed as fourth argument to `customMemoize`
)
const customSelector = customSelectorCreator(
[inputSelector1, inputSelector2],
resultFunc, // `resultFunc` will be passed as first argument to `customMemoize`
)
Internally customSelector calls the memoize function as follows:
customMemoize(resultFunc, option1, option2, option3)
Additional Examples
Customize equalityCheck for lruMemoize
import { createSelectorCreator, lruMemoize } from 'reselect'
import isEqual from 'lodash.isequal'
// create a "selector creator" that uses lodash.isequal instead of ===
const createDeepEqualSelector = createSelectorCreator(lruMemoize, isEqual)
// use the new "selector creator" to create a selector
const selectSum = createDeepEqualSelector(
[state => state.values.filter(val => val < 5)],
values => values.reduce((acc, val) => acc + val, 0),
)
Use memoize function from Lodash for an unbounded cache
import { createSelectorCreator } from 'reselect'
import memoize from 'lodash.memoize'
const hashFn = (...args) =>
args.reduce((acc, val) => acc + '-' + JSON.stringify(val), '')
const customSelectorCreator = createSelectorCreator(memoize, hashFn)
const selector = customSelectorCreator(
[state => state.a, state => state.b],
(a, b) => a + b,
)