@@ -8,6 +8,7 @@ import { Ayanami, Effect, EffectAction, Reducer, useAyanami } from '../src'
8
8
9
9
interface State {
10
10
count : number
11
+ input : string
11
12
}
12
13
13
14
interface TipsState {
@@ -30,6 +31,7 @@ class Tips extends Ayanami<TipsState> {
30
31
class Count extends Ayanami < State > {
31
32
defaultState = {
32
33
count : 0 ,
34
+ input : '' ,
33
35
}
34
36
35
37
otherProps = ''
@@ -40,17 +42,22 @@ class Count extends Ayanami<State> {
40
42
41
43
@Reducer ( )
42
44
add ( state : State , count : number ) : State {
43
- return { count : state . count + count }
45
+ return { ... state , count : state . count + count }
44
46
}
45
47
46
48
@Reducer ( )
47
49
addOne ( state : State ) : State {
48
- return { count : state . count + 1 }
50
+ return { ... state , count : state . count + 1 }
49
51
}
50
52
51
53
@Reducer ( )
52
54
reset ( ) : State {
53
- return { count : 0 }
55
+ return { count : 0 , input : '' }
56
+ }
57
+
58
+ @Reducer ( )
59
+ changeInput ( state : State , value : string ) : State {
60
+ return { ...state , input : value }
54
61
}
55
62
56
63
@Effect ( )
@@ -67,7 +74,7 @@ class Count extends Ayanami<State> {
67
74
}
68
75
69
76
function CountComponent ( ) {
70
- const [ { count } , actions ] = useAyanami ( Count )
77
+ const [ { count, input } , actions ] = useAyanami ( Count )
71
78
const [ { tips } ] = useAyanami ( Tips )
72
79
73
80
const add = ( count : number ) => ( ) => actions . add ( count )
@@ -76,12 +83,26 @@ function CountComponent() {
76
83
return (
77
84
< div >
78
85
< p > count: { count } </ p >
86
+ < p > input: { input } </ p >
79
87
< p > tips: { tips } </ p >
80
88
< button onClick = { add ( 1 ) } > add one</ button >
81
89
< button onClick = { minus ( 1 ) } > minus one</ button >
82
- < button onClick = { actions . reset } > reset to zero</ button >
90
+ < button onClick = { actions . reset } > reset</ button >
91
+ < InputComponent />
83
92
</ div >
84
93
)
85
94
}
86
95
96
+ const InputComponent = React . memo ( ( ) => {
97
+ const [ input , actions ] = useAyanami ( Count , { selector : ( state ) => state . input } )
98
+
99
+ return (
100
+ < div >
101
+ < h3 > { input } </ h3 >
102
+ < input value = { input } onChange = { ( e ) => actions . changeInput ( e . target . value ) } />
103
+ </ div >
104
+ )
105
+ } )
106
+ InputComponent . displayName = 'InputComponent'
107
+
87
108
ReactDOM . render ( < CountComponent /> , document . querySelector ( '#app' ) )
0 commit comments