File tree 2 files changed +55
-12
lines changed
examples/with-reasonml/components
2 files changed +55
-12
lines changed Original file line number Diff line number Diff line change 1
- let count = ref (0 );
1
+ /*
2
+ This is the set of action messages which are produced by this component.
3
+ * Add updates the components internal state.
4
+ */
5
+ type action =
6
+ | Add
7
+
8
+ /*
9
+ This is the components internal state representation. This state object
10
+ is unique to each instance of the component.
11
+ */
12
+ type state = {
13
+ count: int ,
14
+ };
15
+
16
+ let counterReducer = (state, action) =>
17
+ switch (action) {
18
+ | Add => { count: state. count + 1 }
19
+ };
2
20
3
21
[@ react . component ]
4
22
let make = () => {
5
- let (_state , dispatch ) = React . useReducer(
6
- (_, _) => Js . Obj . empty() ,
7
- Js . Obj . empty()
8
- );
9
-
10
- let countMsg = "Count: " ++ string_of_int(count^ );
23
+ let (state , dispatch ) = React . useReducer(counterReducer, { count: 0 });
24
+ let (globalState , globalDispatch ) = GlobalCount . useGlobalCount() ;
11
25
12
- let add = () => {
13
- count := count^ + 1 ;
14
- dispatch() ;
15
- };
26
+ let countMsg = "Count: " ++ string_of_int(state. count);
27
+ let persistentCountMsg = "Persistent Count " ++ string_of_int(globalState);
16
28
17
29
<div >
18
30
<p > {ReasonReact . string(countMsg)} </p >
19
- <button onClick= {_ => add() }> {React . string("Add" )} </button >
31
+ <button onClick= {_ => dispatch(Add )}> {React . string("Add" )} </button >
32
+ <p > {ReasonReact . string(persistentCountMsg)} </p >
33
+ <button onClick= {_ => globalDispatch(GlobalCount . Increment )}>
34
+ {React . string("Add" )}
35
+ </button >
20
36
</div >;
21
37
};
22
38
Original file line number Diff line number Diff line change
1
+ /*
2
+ ## Global Count
3
+ This captures the count globally so that it will be persisted across
4
+ the `Index` and `About` pages. This replicates the functionality
5
+ of the shared-modules example.
6
+ */
7
+ type t = ref (int );
8
+
9
+ type action =
10
+ | Increment ;
11
+
12
+ let current = ref (0 );
13
+
14
+ let increment = () => {
15
+ current := current^ + 1 ;
16
+ current;
17
+ };
18
+
19
+ let reducer = (_state, action) => {
20
+ switch (action) {
21
+ | Increment =>
22
+ let updated = increment() ;
23
+ updated^
24
+ }
25
+ };
26
+
27
+ let useGlobalCount = () => React . useReducer(reducer, current^ );
You can’t perform that action at this time.
0 commit comments