Write

React Components

in Go

Go React is React bindings for Go with a set of supplementary components.

To be more specific, it is GopherJS bindings for Facebook’s React – have a look at github.com/bep/gr.

Go React code example in editor.

I started this side project some time ago, and I have plans to get it passed the experimental stage – it isn’t ready for production use yet – but I use it for some internal web apps and it works.

And it is a very pleasant experience to write React applications in Go and have all the ReactJS components available via npm install .

A simple click counter example looks like this:

func main () { component := gr. New ( new (clickCounter)) gr. RenderLoop ( func () { component. Render ( "react" , gr.Props{}) }) } type clickCounter struct { * gr.This } // Implements the StateInitializer interface. func (c clickCounter) GetInitialState () gr.State { return gr.State{ "counter" : 0 } } // Implements the Renderer interface. func (c clickCounter) Render () gr.Component { counter := c. State ()[ "counter" ] message := fmt. Sprintf ( " Click me! Number of clicks: %v" , counter) elem := el. Div ( el. Button ( gr. CSS ( "btn" , "btn-lg" , "btn-primary" ), gr. Style ( "color" , "orange" ), gr. Text (message), evt. Click (c.onClick))) return examples. Example ( "Click Counter" , elem) } func (c clickCounter) onClick (event * gr.Event) { c. SetState (gr.State{ "counter" : c. State (). Int ( "counter" ) + 1 }) } // Implements the ShouldComponentUpdate interface. func (c clickCounter) ShouldComponentUpdate (next gr.Cops) bool { return c. State (). HasChanged (next.State, "counter" ) }