strapi/docs/js/reselect.md

79 lines
1.8 KiB
Markdown
Raw Normal View History

2016-08-18 11:41:13 +02:00
# `reselect`
reselect memoizes ("caches") previous state trees and calculations based on said
tree. This means repeated changes and calculations are fast and efficient,
providing us with a performance boost over standard `mapStateToProps`
implementations.
The [official documentation](https://github.com/reactjs/reselect)
offers a good starting point!
## Usage
There are two different kinds of selectors, simple and complex ones.
### Simple selectors
Simple selectors are just that: they take the application state and select a
part of it.
```javascript
const mySelector = (state) => state.get('someState');
export {
mySelector,
};
```
### Complex selectors
If we need to, we can combine simple selectors to build more complex ones which
get nested state parts with reselects `createSelector` function. We import other
selectors and pass them to the `createSelector` call:
```javascript
import { createSelector } from 'reselect';
import mySelector from 'mySelector';
const myComplexSelector = createSelector(
mySelector,
(myState) => myState.get('someNestedState')
);
export {
myComplexSelector,
};
```
These selectors can then either be used directly in our containers as
`mapStateToProps` functions or be nested with `createSelector` once again:
```javascript
export default connect(createSelector(
myComplexSelector,
(myNestedState) => ({ data: myNestedState })
))(SomeComponent);
```
### Adding a new selector
If you have a `selectors.js` file next to the reducer which's part of the state
you want to select, add your selector to said file. If you don't have one yet,
add a new one into your container folder and fill it with this boilerplate code:
```JS
import { createSelector } from 'reselect';
const selectMyState = () => createSelector(
);
export {
selectMyState,
};
```
---
_Don't like this feature? [Click here](remove.md)_