-
Notifications
You must be signed in to change notification settings - Fork 32
Expand file tree
/
Copy pathExample.purs
More file actions
46 lines (42 loc) · 1.22 KB
/
Example.purs
File metadata and controls
46 lines (42 loc) · 1.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
module Example where
import Prelude
import Effect (Effect)
import React.Basic.DOM as R
import React.Basic.Events (handler_)
import React.Basic.Hooks (type (/\), JSX, ReactContext, Component, component, createContext, provider, useContext, useState, (/\))
import React.Basic.Hooks as React
mkExample :: Component Unit
mkExample = do
counterContext <- createContext (0 /\ pure unit)
store <- mkStore counterContext
counter <- mkCounter counterContext
component "Context" \_ -> React.do
pure
$ store
[ counter unit
, counter unit
, counter unit
]
mkStore ::
ReactContext (Int /\ (Effect Unit)) ->
Component (Array JSX)
mkStore context = do
component "Store" \content -> React.do
counter /\ setCounter <- useState 0
let
increment = setCounter (_ + 1)
pure
$ provider context
(counter /\ increment)
content
mkCounter ::
ReactContext (Int /\ (Effect Unit)) ->
Component Unit
mkCounter counterContext = do
component "Counter" \_ -> React.do
counter /\ increment <- useContext counterContext
pure
$ R.button
{ onClick: handler_ increment
, children: [ R.text $ "Increment: " <> show counter ]
}