Redux Query provides helpers to search through immutable maps, cache results, return pure JS objects
npm i @rocket-station/redux-query
import { init, get } from 'redux-query'
const store = fromJS({
app: {
foo: {
'1': true,
'2': false,
'3': true,
},
bar: { tst: ['foo', 'bar'] },
},
})
console.log(init([
get('foo', [
get('1'),
get('3'),
]),
get(['bar', true], [
get(['tst', 'testStr'], (s) => s.join('-')),
get(['tst', 'testArr'])
])
], 'app')(store)) // { '1': true, '3': true, bar: { testStr: 'foo-bar', testArr: [ 'foo', 'bar' ] } }
We created Redux Query to simplify our interactions with Redux state. It resolves several issues:
- Provides schema-like syntax for getting values of any nesting levels
- Allows to create custom getters inside a schema
- Caches results based on provided requests
- Clears invalid cache
- Converts any income to immutable map
- Converts any outcome to js objects
init(sequence, scope)(store, props)
- initiates a new query and returns a function, which executes it
Name | Type | Vals | Default | Description |
---|---|---|---|---|
sequence |
Array<Function> |
Function(get, store) |
[] |
An array of helpers, which will be executed in the sequential query |
scope |
Array<String> |
[...String] |
[] |
If it is defined it determines the root node of the map. Otherwise, each query will process the whole store |
store |
Immutable Map | Immutable Map | Immutable.Map() |
|
props |
Object |
Object |
{} |
An object, which will be passed to any custom helper |
get(key, val, initial)(store, props, result)
- initiates a helper, which gets a value from a store by a key, and returns a function, which executes it
Name | Type | Vals | Default | Description |
---|---|---|---|---|
key |
null , String , Array |
null , String , [String, String] , [String, true] [null, null] , [null, String] , [null, true] [String, null] , |
undefined |
If it is passed, it will be searched in a store. If an array of two strings is passed, the first string will be used as a key, which will be searched in a store, and the second string will be used as an alias, which will be returned in a result. If the second item is not defined and a founded value is an object, it will be merged into a result. Otherwise, it will be attached to result by a key or an alias |
val |
Function , Array<Function> |
[...(get, store)()] |
undefined |
If it is passed, will be used as a nested helper |
initial |
Any | Any | Immutable.Map() |
It will be returned, if found val is undefined |
store(sequence)(store, props, result)
- initiates a helper, which memorizes a result and calculates it again only if something was changed
Name | Type | Vals | Default | Description |
---|---|---|---|---|
sequence |
Array<Function> |
Function(get, store) |
[] |
An array of helpers, which will be executed in the sequential query |
Redux Query Immutable Map is licensed under the MIT License
Created by RocketStation