@@ -8,6 +8,7 @@ import { Ayanami, Effect, EffectAction, Reducer, useAyanami } from '../src'
88
99interface State {
1010 count : number
11+ input : string
1112}
1213
1314interface TipsState {
@@ -30,6 +31,7 @@ class Tips extends Ayanami<TipsState> {
3031class Count extends Ayanami < State > {
3132 defaultState = {
3233 count : 0 ,
34+ input : '' ,
3335 }
3436
3537 otherProps = ''
@@ -40,17 +42,22 @@ class Count extends Ayanami<State> {
4042
4143 @Reducer ( )
4244 add ( state : State , count : number ) : State {
43- return { count : state . count + count }
45+ return { ... state , count : state . count + count }
4446 }
4547
4648 @Reducer ( )
4749 addOne ( state : State ) : State {
48- return { count : state . count + 1 }
50+ return { ... state , count : state . count + 1 }
4951 }
5052
5153 @Reducer ( )
5254 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 }
5461 }
5562
5663 @Effect ( )
@@ -67,7 +74,7 @@ class Count extends Ayanami<State> {
6774}
6875
6976function CountComponent ( ) {
70- const [ { count } , actions ] = useAyanami ( Count )
77+ const [ { count, input } , actions ] = useAyanami ( Count )
7178 const [ { tips } ] = useAyanami ( Tips )
7279
7380 const add = ( count : number ) => ( ) => actions . add ( count )
@@ -76,12 +83,26 @@ function CountComponent() {
7683 return (
7784 < div >
7885 < p > count: { count } </ p >
86+ < p > input: { input } </ p >
7987 < p > tips: { tips } </ p >
8088 < button onClick = { add ( 1 ) } > add one</ button >
8189 < 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 />
8392 </ div >
8493 )
8594}
8695
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+
87108ReactDOM . render ( < CountComponent /> , document . querySelector ( '#app' ) )
0 commit comments