@reffect/react
Version:
React bindings for Reffect
52 lines (39 loc) • 1.88 kB
Markdown
<div align="center">
[](https://github.com/acacode/reffect)
[](https://www.npmjs.com/package/@reffect/react)
[](https://bundlephobia.com/result?p=@reffect/react)
[](https://github.com/acacode/reffect)
<div align="left">
Reffect — is a declarative and reactive multi-store state manager for JavaScript/TypeScript applications inspired by [Reatom](https://github.com/artalar/reatom) and [Effector](https://github.com/zerobias/effector)
# /react
bindings (hooks) for [`React`](https://github.com/facebook/react)
Hooks:
`useStore(store)` - returns actual store state
`useEffectState(effect)` - returns effect's state flags (`{ pending: boolean, fail: boolean, done: boolean }`)
## How to use
```tsx
import React from "react";
import { useStore, useEffectState } from "@reffect/react";
import { keyboardsStore, selectKeyboard, getAllKeyboards } from "path/to/store";
// keyboardsStore it is store created via `store()`
// selectKeyboard it is effect created via `effect()`
// getAllKeyboards it is async effect created via `effect()`
const KeyboardsData = () => {
const { list } = useStore(keyboardsStore);
const { pending } = useEffectState(getAllKeyboards);
useEffect(() => {
getAllKeyboards();
}, []);
return (
<div>
{pending && <div>Loading</div>}
{!pending &&
list.map(keyboard => (
<div key={keyboard.id} onClick={() => selectKeyboard(keyboard.id)}>
{keyboard.name}
</div>
))}
</div>
);
};
```