Lean (just 24 lines of code!) immutable wrappers around lodash get/set/update/delete, especially helpful for redux reducers.
npm install lodash-redux-immutability --save
lodash.clone;
lodash.get;
lodash.isempty;
lodash.isnumber;
lodash.isstring;
lodash.setwith;
lodash.unset;
✅ 100%
When setting/updating, passing a number (ie, 3
) in your path
will look for an array at index 3 , but passing a "string-number" (ie, '3'
) will look for an object with a key of '3'.
Source
|
Tests
Merges (spreads) valueToUpdate
at path
inside of state
with the current value found at this path, creating any keys in path that do not exist, returning a new object where affected objects in the path have a new reference.
import { updateIn } from 'lodash-redux-immutability';
const state = {
stores: {
'3': {
name: 'three'
'4': {
name: 'four'
}
}
};
const storeThreeUpdates = { location: 'Third street' };
const newState = updateIn(state, ['stores', '3'], storeThreeUpdates);
newState.stores['3']; // { name: 'three', 'location: 'Third street' };
newState.stores === state.stores; // false
newState.stores['3'] === state.stores['3']; // false
newState.stores['4'] === state.stores['4']; // true
Replaces valueToSet
at path
inside of state
, creating any keys in path that do not exist, returning a new object where affected objects in the path have a new reference.
import { setIn } from 'lodash-redux-immutability';
const state = {
stores: {
'3': {
name: 'three'
}
'4': {
name: 'four'
}
}
};
const newState = setIn(state, ['stores', '3', 'name'], 'tres');
newState.stores['3']; // { name: 'tres' }
newState.stores === state.stores; // false
newState.stores['3'] === state.stores['3']; // false
newState.stores['4'] === state.stores['4']; // true
Deletes the value at path
inside of state
, returning a new object where affected objects in the path have a new reference.
import { deleteIn } from 'lodash-redux-immutability';
const state = {
'3': {
name: 'three'
},
'4': {
name: 'four'
}
};
const newState = deleteIn(state, ['stores', '3'];
newState.stores['3']; // undefined
newState.stores === state.stores; // false
newState.stores['4'] === state.stores['4']; // true
Get a value from an object by path. Returns the value, unless path is an empty [], in which case returns the original object
import { getIn } from 'lodash-redux-immutability';
const state = {
stores: {
'3': {
name: 'three'
}
}
};
const storeThreeName = getIn(state, ['stores', '3', 'name']); // 'three'
const entireState = getIn(state, []); // the entire 'state' object (this is what makes `getIn` different from the traditional `_.get`)
MIT