https://github.com/cah4a/immutable-modify
Slim zero dependencies helper functions for modifying redux state or frozen objects
https://github.com/cah4a/immutable-modify
frozen immutable redux
Last synced: about 1 month ago
JSON representation
Slim zero dependencies helper functions for modifying redux state or frozen objects
- Host: GitHub
- URL: https://github.com/cah4a/immutable-modify
- Owner: cah4a
- Created: 2018-02-09T10:20:49.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2018-03-14T11:12:10.000Z (about 8 years ago)
- Last Synced: 2025-06-03T05:38:37.711Z (about 1 year ago)
- Topics: frozen, immutable, redux
- Language: JavaScript
- Homepage:
- Size: 34.2 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# immutable-modify
Slim zero dependencies helper function for modifying redux state or frozen objects
Easily create updated version of your Plain Javascript Object.
Function will create new references to objects or arrays when nested data is changed and leave references otherwise.
That allows `react` and `react-redux` to fast check your props using reference equality.
## Analogs
- [immutability-helper](https://github.com/kolodny/immutability-helper)
- [immutable-set](https://github.com/M6Web/immutable-set)
- [immutable-setter](https://github.com/bormind/immutable-setter)
- [imset](https://github.com/brigand/imset)
- [immutability-util](https://github.com/hustcc/immutability-util)
## Install
```
yarn add immutable-modify
```
or
```
npm install --save immutable-modify
```
## Api
### set(object, keyPath, value)
Arguments:
- **object (Object)**: The object modify
- **keyPath (string | Array)**: The path of the property to set
- **value (any | (leaf) => any)**: The value to set or update function
Returns:
(Object): Returns object
```javascript
import {set} from 'immutable-modify'
const state = {user: {name: 'Skywalker'}}
// same as set(state, ['user', 'name'], 'Dart Vader')
const newState = set(state, 'user.name', 'Dart Vader')
// newState is now {user: {name: 'Dart Vader'}}
newState === state // false
newState.user === state.user // false
```
Also `value` could be function:
```javascript
import {set} from 'immutable-modify'
const state = {user: {name: 'Skywalker', isJedi: false}, settings: {}}
const newState = set(state, 'user.isJedi', (isJedi) => !isJedi)
// newState is now {user: {name: 'Skywalker', isJedi: true}}
newState === state // false
newState.user === state.user // false
newState.settings === state.settings // true
```
#### Attention!
That updater function should return *new reference*, otherwise nothing will updated:
```javascript
import {set} from 'immutable-modify'
const state = {user: {name: 'Skywalker', isJedi: false}, settings: {}}
const newState = set(state, 'user', user => {
user.isJedi = true
return user
})
// newState is still {user: {name: 'Skywalker', isJedi: false}}
newState === state // true
newState.user === state.user // true
newState.settings === state.settings // true
```
### push(object, path, item)
```javascript
import {push} from 'immutable-modify'
const state = {sequence: [{a: 1}, {a: 2}]}
const newState = push(state, 'sequence', {a: 3})
// newState is now {sequence: [{a: 1}, {a: 2}, {a: 3}]}
newState === state // false
newState.sequence === state.sequence // false
newState.sequence[0] === state.sequence[0] // true
newState.sequence[1] === state.sequence[1] // true
```
### merge(object, path, item)
```javascript
import {merge} from 'immutable-modify'
const state = {product: {name: 'sepulka'}}
const newState = merge(state, 'product', {description: 'Best with sepulator'})
// newState is now {product: {name: 'sepulka', description: 'Best with sepulator'}}
newState === state // false
newState.product === state.product // false
newState.product.name === state.product.name // true
```
### remove(object, path)
```javascript
import {remove} from 'immutable-modify'
const state = {product: {name: 'sepulka', isAvailable: true}}
const newState = remove(state, 'product.isAvailable')
// newState is now {product: {name: 'sepulka'}}
newState === state // false
newState.product === state.product // false
```
## Test
```
yarn test
```