Skip to content

Commit cbafc98

Browse files
Making react work
1 parent a071e0a commit cbafc98

4 files changed

Lines changed: 86 additions & 76 deletions

File tree

playground/internal/react/component.go

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -33,30 +33,3 @@ func (c *Component) GetState(key string) *js.Object {
3333
func (c *Component) SetState(newState State) {
3434
c.Call("setState", newState)
3535
}
36-
37-
//============================================
38-
39-
func NewCounter(initName string, initAge int) *Element {
40-
return NewComponent(Props{}, map[string]any{
41-
`name`: initName,
42-
`age`: initAge,
43-
}, func(c *Component) Node {
44-
return Fragment(
45-
CreateElement(`input`, Props{
46-
`value`: c.GetState(`name`).String(),
47-
`onChange`: func(e *js.Object) {
48-
c.SetState(State{`name`: e.Get(`target`).Get(`value`).String()})
49-
},
50-
}),
51-
CreateElement(`input`, Props{
52-
`type`: `button`,
53-
`value`: `Increment age`,
54-
`onClick`: func() {
55-
c.SetState(State{`age`: c.GetState(`age`).Int() + 1})
56-
},
57-
}),
58-
CreateElement(`p`, nil,
59-
`Hello, `, c.GetState(`name`).String(), `. You are `, c.GetState(`age`).Int(), `.`),
60-
)
61-
})
62-
}
Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package react
22

3+
import "github.com/gopherjs/gopherjs/js"
4+
5+
func StrictMode(children ...Node) *Element {
6+
return CreateElement(react().Get(`StrictMode`), nil, children...)
7+
}
8+
39
func Fragment(children ...Node) *Element {
4-
args := []any{react().Get(`Fragment`), nil}
5-
for _, c := range children {
6-
args = append(args, checkNode(c))
7-
}
8-
return &Element{Object: react().Call(`createElement`, args...)}
10+
return CreateElement(react().Get(`Fragment`), nil, children...)
911
}
1012

1113
func Div(props Props, children ...Node) *Element {
@@ -16,9 +18,39 @@ func Span(props Props, children ...Node) *Element {
1618
return CreateElement(`span`, props, children...)
1719
}
1820

21+
func P(props Props, children ...Node) *Element {
22+
return CreateElement(`p`, props, children...)
23+
}
24+
1925
func Button(value string, props Props, onClick func()) *Element {
26+
if props == nil {
27+
props = Props{}
28+
}
2029
props[`value`] = value
2130
props[`type`] = `button`
2231
props[`onClick`] = onClick
2332
return CreateElement(`input`, props)
2433
}
34+
35+
//============================================
36+
37+
func NewCounter(initName string, initAge int) *Element {
38+
return NewComponent(Props{}, map[string]any{
39+
`name`: initName,
40+
`age`: initAge,
41+
}, func(c *Component) Node {
42+
return StrictMode(
43+
CreateElement(`input`, Props{
44+
`value`: c.GetState(`name`).String(),
45+
`onChange`: func(e *js.Object) {
46+
c.SetState(State{`name`: e.Get(`target`).Get(`value`).String()})
47+
},
48+
}),
49+
Button(`Increment age`, nil, func() {
50+
c.SetState(State{`age`: c.GetState(`age`).Int() + 1})
51+
}),
52+
CreateElement(`p`, nil,
53+
`Hello, `, c.GetState(`name`).String(), `. You are `, c.GetState(`age`).Int(), `.`),
54+
)
55+
})
56+
}

playground/internal/react/react.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ func (r *Root) Render(n Node) {
4141
r.Call(`render`, checkNode(n))
4242
}
4343

44-
func CreateElement(typ string, props Props, children ...Node) *Element {
44+
func CreateElement(typ any, props Props, children ...Node) *Element {
4545
args := []any{typ, props}
4646
for _, c := range children {
4747
args = append(args, checkNode(c))

playground/playground.js

Lines changed: 48 additions & 43 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)