github.com/jgarto/itcv@v0.0.0-20180826224514-4eea09c1aa0d/examples/sites/globalstate/app.go (about) 1 package main 2 3 import ( 4 "myitcv.io/react" 5 "myitcv.io/react/examples/sites/globalstate/state" 6 ) 7 8 type AppDef struct { 9 react.ComponentDef 10 } 11 12 type AppState struct { 13 hideViewer bool 14 } 15 16 func App() *AppElem { 17 return buildAppElem() 18 } 19 20 func (a AppDef) Render() react.Element { 21 var viewer *react.DivElem 22 var showHide *react.ButtonElem 23 24 if a.State().hideViewer { 25 showHide = react.Button( 26 &react.ButtonProps{OnClick: hideClick{a, false}}, 27 react.S("Show viewer"), 28 ) 29 } else { 30 viewer = react.Div(nil, 31 react.H3(nil, react.S("Person Viewer")), 32 PersonViewer(), 33 ) 34 showHide = react.Button( 35 &react.ButtonProps{OnClick: hideClick{a, true}}, 36 react.S("Hide viewer"), 37 ) 38 } 39 40 return react.Div(&react.DivProps{ClassName: "container"}, 41 react.H3(nil, react.S("Person Chooser")), 42 PersonChooser(PersonChooserProps{ 43 PersonState: state.State.CurrentPerson(), 44 }), 45 react.Hr(nil), 46 showHide, 47 viewer, 48 ) 49 } 50 51 type hideClick struct { 52 AppDef 53 showHide bool 54 } 55 56 func (h hideClick) OnClick(e *react.SyntheticMouseEvent) { 57 h.AppDef.SetState(AppState{ 58 hideViewer: h.showHide, 59 }) 60 }