An open API service indexing awesome lists of open source software.

https://github.com/blackglory/extra-react-store

🌳
https://github.com/blackglory/extra-react-store

browser esm library npm-package react typescript

Last synced: about 2 months ago
JSON representation

🌳

Awesome Lists containing this project

README

          

# extra-react-store
## Install
```sh
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 (
update(increment(1))}>Increment
)
}

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
```

### Store
```ts
class Store implements IStore {
constructor(initialState: State)
}
```

### createStoreContext
```ts
function createStoreContext(): StoreContext
```

### useSelector
```ts
function useSelector(
context: StoreContext
, selector: (state: State) => Value
, isEqual: (a: Value, b: Value) => boolean = isReferenceEqual
): Value
```

### useUpdater
```ts
function useUpdater(context: StoreContext): Updater
```

### usePartialUpdater
```ts
function usePartialUpdater(
context: StoreContext
, extractPartialState: (state: State) => PartialState
, mergePartialState: (state: State, partialState: PartialState) => State
): Updater
```