nonaction
Version:
Make state management easily like you do nothing!
80 lines (58 loc) • 2 kB
Markdown
- 概述
- [Container](
- [Provider](
- [useProvided](
**Nonaction** 是一個 React 的狀態管理函式庫,透過 Context API 實現。
Nonaction 允許開發者將狀態操作寫成 Hooks 的形式,並且允許在頂層注入多個狀態操作。
- `Hook`<Function> 一個可操作狀態的 Hook function,你可以在這裡暴露狀態的 getter、setter,或是暴露操作 setter 的 function。
```javascript
const useCounter = () => {
// Simple hook
const [count, setCount] = useState(0);
const add = val => setCount(count + val);
const sub = val => setCount(count - val);
return { count, add, sub };
};
export default Container(useCounter);
// 在這裡把狀態操作的函數透過 Container函數 封裝
```
Provider 是一個高階組件,其透過 `inject` 這個 Props 將 `Container`注入。
```jsx
// Here is root component
import { Provider } from 'nonaction';
import { CounterContainer, anotherContainer } from './CounterContainer';
import Child from './Component/Child.jsx';
const App = () => {
return (
<Provider inject={[CounterContainer, anotherContaner]}>
{/* 這裡開始的子組件都能 share 這個 Provider 上注入的Hooks */}
<Child />
</Provider>
);
};
```
useProvided 是一個 Custom Hooks ,其用法與 useContext 無異,它會在 Provider 所注入的 Container 尋找對應的 Container 之 Context。
```jsx
// Child.jsx
import { useProvided } from 'nonaction';
import { CountContainer } from '../CountContainer';
export default () => {
const { count, add, sub } = useProvided(CountContainer);
return (
<div>
<p>now count is {count}</p>
<button onClick={() => add(1)}>+1</button>
<button onClick={() => sub(1)}>+1</button>
</div>
);
};
```