```sh npm install --save extra-react-store # or yarn add extra-react-store ```
npm install extra-react-storesh
npm install --save extra-react-store
or
yarn add extra-react-store
`Usage
`tsx
import { Draft } from 'immer'
import { useMemo } from 'react'
import { createStoreContext, Store, useSelector, useUpdater } from 'extra-react-store'interface IState {
count: number
}
const Context = createStoreContext()
function App() {
const store = useMemo>(() => new Store({ count: 0 }), [])
return (
)
}
function Viewer() {
const count = useSelector(Context, state => state.count)
return (
{count}
)
}
function Controller() {
const update = useUpdater(Context)
return (
)
}
function increment(value: number): (state: Draft) => void {
return state => {
state.count += value
}
}
`API
`ts
import { Draft } from 'immer'type StoreContext = React.Context>
interface IStore {
getState(): State
setState(newState: State): void
subscribe(fn: (state: State) => void): () => void
}
type Updater = (...args:
| [newState: State]
| [fn: (draft: Draft) => void | State]
) => void
`$3
`ts
class Store implements IStore {
constructor(initialState: State)
}
`$3
`ts
function createStoreContext(): StoreContext
`$3
`ts
function useSelector(
context: StoreContext
, selector: (state: State) => Value
, isEqual: (a: Value, b: Value) => boolean = isReferenceEqual
): Value
`$3
`ts
function useUpdater(context: StoreContext): Updater
`$3
`ts
function usePartialUpdater(
context: StoreContext
, extractPartialState: (state: State) => PartialState
, mergePartialState: (state: State, partialState: PartialState) => State
): Updater
``