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
|
11 | npm install react-use-control
|
12 | ```
|
13 |
|
14 | ## Usage
|
15 |
|
16 | ```jsx
|
17 | import * as React from 'react';
|
18 | import useControl from 'react-use-control';
|
19 |
|
20 | function 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 |
|
36 | function 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 |
|
50 | export 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
|
67 | npm start
|
68 |
|
69 | # build
|
70 | npm run build
|
71 |
|
72 | # test
|
73 | npm test
|
74 |
|
75 | # commit changes
|
76 | npm run commit
|
77 |
|
78 | # publish
|
79 | npm publish
|
80 | ```
|