forked from karaxnim/karax
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest.nim
105 lines (76 loc) · 1.93 KB
/
test.nim
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import src/karax/prelude
import src/karax/jdict
import strformat
var globalTables = newJDict[int, int]()
var globalCounter = -1
type
State = tuple
value: int
setValue: proc(newValue: int) {.closure.}
proc useState(initial: int): State =
inc globalCounter
let times = globalCounter
if times in globalTables:
discard
else:
globalTables[times] = initial
proc setState(newValue: int) =
echo newValue
globalTables[times] = newValue
result = (globalTables[times], setState)
proc stat(): VNode =
var (state, setState) = useState(0)
echo fmt"{state = }"
result = buildHtml(tdiv):
h2: text $state
button:
proc onClick(ev: Event, n: VNode) =
inc state
setState(state)
text "Click Me"
proc hello(): VNode =
globalCounter = -1
var (state, setState) = useState(0)
result = buildHtml(tdiv):
h1(): text $state
button:
proc onClick(ev: Event, n: VNode) =
inc state
setState(state)
text "Click Me"
stat()
setRenderer hello
# type
# State[T] = tuple
# value: T
# setState: proc (newState: T) {.closure.}
# proc useState[T](defaultValue: T): State[T] =
# var defaultValue = defaultValue
# let setState = proc (newState: T) =
# defaultValue = newState
# result = (defaultValue, setState)
# proc hello() =
# let (state, setState) = useState[int](0)
# setState(state + 1)
# echo state
# for i in 0 ..< 10:
# hello()
# type
# State = tuple
# value: int
# setState: proc (newState: int) {.closure, gcsafe.}
# var defaultVal: int
# var first = true
# proc useState(defaultValue: int): State =
# if first:
# defaultVal = defaultValue
# first = false
# let setState = proc (newState: int) {.closure, gcsafe.} =
# defaultVal = newState
# result = (defaultVal, setState)
# proc hello() =
# let (state, setState) = useState(0)
# setState(state + 1)
# echo state
# for i in 0 ..< 10:
# hello()