IniZio / Reim
Programming Languages
Projects that are alternatives of or similar to Reim
Reim Β·
π€ Why another state library?
- π€ Update state by simply mutating it, thanks to immer
- π Immutable state
- β‘οΈ Small, 6kb gzip + minified
- π Typing support for Typescript & Flow
- βοΈ Supports Redux Dev Tools
π How to use
$ yarn add reim react-reim
Then use useReim
just like other React hooks :
import React from 'react'
import reim from 'reim'
import {useReim} from 'react-reim'
function Counter() {
const [count, {increment}] = useReim(10, {
increment: () => state => state++,
decrement: () => state => state--
})
return (
<div>
<button onClick={increment}>+</button>
<div id="count">{count}</div>
</div>
)
}
or use <State/>
for some cases:
import React from 'react'
import reim from 'reim'
import {State} from 'react-reim'
const Toggle = () => (
<State
initial={false}
actions={{toggle: () => state => !state}}
>
{(visible, {toggle}) => (
<button onClick={toggle}>{visible ? 'On' : 'Off'}</button>
)}
</State>
)
Table of Contents
reim
reim(state | store, {actions?: Actions, name?: string})
Returns a new Reim
store.
An action is simple a function that returns a state updater.
For example:
const store = reim({count: 10}, {
actions: {
add: amount => state => {state.count += amount}
}
})
Then just use it as a method:
// before: {count: 10}
store.add(5)
// after: {count: 15}
filter(getter: {[name]: state => any} | state => any | keyof typeof state)
Gets current snapshot of store
subscribe(fn, {filter})
fn
gets called on change. You can unsubscribe(fn)
to stop subscription.
reim.snapshot()
Returns snapshot of all stores created
reim({abc: 133})
reim.snapshot() // -> {0: {abc: 133}}
reim.stringify()
Returns JSON.stringify
-ed snapshot of all stores created, safe for injecting
reim.preload(snapshot)
Used in client side for preloading states
// Server side:
`<script>window.__PRELOAD_STATE__ = ${reim.stringify()}</script>`
// Client side:
reim.preload(window.__PRELOAD_STATE__)
react-reim
<State/>
initial
Initial value of the store. The store is resets if initial value is changed.
store
Receives a Reim
store, initial
is ignored if store
is provided
actions
Same as actions
in reim()
filter
Same as filter
in reim()
useReim(store | state, {filter, actions})
Returns [snapshot, actions]
β€οΈ Contributing
Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.
π License
MIT Β© IniZio