UNPKG

1.66 kBMarkdownView Raw
1[![Build Status](https://travis-ci.org/wmzy/react-use-control.svg?branch=master)](https://travis-ci.org/wmzy/react-use-control)
2[![Coverage Status](https://coveralls.io/repos/github/wmzy/react-use-control/badge.svg?branch=master)](https://coveralls.io/github/wmzy/react-use-control?branch=master)
3[![install size](https://packagephobia.now.sh/badge?p=react-use-control)](https://packagephobia.now.sh/result?p=react-use-control)
4# react-use-control
5
6> Split state from view.
7
8## Install
9
10```bash
11npm install react-use-control
12```
13
14## Usage
15
16```jsx
17import * as React from 'react';
18import useControl from 'react-use-control';
19
20function useCounter(counterControl) {
21 const [control, useProp] = useControl(
22 counterControl ? counterControl.control : undefined
23 );
24
25 return {
26 control,
27 useStep(step) {
28 return useProp('step', step);
29 },
30 useNumber(num) {
31 return useProp('num', num);
32 }
33 };
34}
35
36function Counter({control}) {
37 const m = useCounter(control);
38 const [step, setStep] = m.useStep(1);
39 const [num, setNum] = m.useNumber(0);
40
41 return (
42 <div>
43 <span> {num} </span>
44 <button onClick={() => setNum((n) => n + step)}>add {step}</button>
45 <button onClick={() => setStep((n) => n + 1)}>add step</button>
46 </div>
47 );
48}
49
50export default function App() {
51 const counter = useCounter();
52 const [, setNum] = counter.useNumber(1);
53
54 return (
55 <div>
56 <Counter control={counter} />
57 <button onClick={() => setNum(1)}>Reset</button>
58 </div>
59 );
60}
61```
62
63## Workflow
64
65```bash
66# develop
67npm start
68
69# build
70npm run build
71
72# test
73npm test
74
75# commit changes
76npm run commit
77
78# publish
79npm publish
80```