You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This package is a React hook for partially updating object states within functional components that avoids the default behavior of `useState` that overwrites the entire object state. It reflects the merge behavior of `setState` used in classical components.
8
+
9
+
**Use this** when you need an object state that shouldn't be split up into multiple states.
10
+
**Don't use this** if you only need an object state with a few simple properties.
11
+
12
+
## Features
13
+
14
+
- Partially update object values in state without erasing any non-updated entries
15
+
- Calculate new values based on the previous state with a function argument
16
+
17
+
## Install
18
+
19
+
```bash
20
+
$ npm install react-hooks-object-state
21
+
```
22
+
23
+
Peer dependencies: react (^16.8.0)
24
+
25
+
## Usage
26
+
27
+
Within a functional component, simply declare and use the `useObjectState` hook to create a state object. Then pass any object updates to the returned setter function to update the original object.
Alternatively, you can pass a function to the setter if you need to use the previous state to calculate new state values.
53
+
54
+
```jsx
55
+
constupdateObject= () => {
56
+
setMyObject((state) => {
57
+
return {
58
+
string:state.str+'bar'
59
+
}
60
+
})
61
+
}
62
+
```
63
+
64
+
The use of `props` in function arguments is not included since hooks are not able to read component props, and workarounds would not effectively replicate the classical `setState` behavior.
65
+
66
+
#### Additional info
67
+
68
+
An initial object **must** be provided to `useObjectState`. This hook deep-merges objects by copying common entries from a source to a target object.
69
+
70
+
Like the classical `setState` method, this does not create entries if they don't already exist. Providing an empty initial object will always result in an empty object.
0 commit comments