Go with React
Facebook's React is one of the most dominant libraries for front-end development around. Google's Go programming language is one of the most elegantly crafted languages for server development. Why not combine the two?
This package is an extremely thin wrapper over the native react.js API. The objective was to make it light-weight, developer-friendly and intuitive. You shouldnโt have to scour the documentation to get goingโโโa few peeks should be adequate. If you know your way around the React API and you know a bit of Go, then you should be able to make prototypes and production-worthy applications in no time.
This package is best suited for making cross-platform Desktop applications using these technologies:
The package is production ready. An optional (but highly convenient) elements
sub-package is also included.
See Tutorial here.
Dependencies
- React 16.5.2 (it will probably work with lower)
- Gopherjs (Go to Javascript transpiler)
- create-react-class
- react-addons-pure-render-mixin (optional: For creating a
PureComponent
)
Installation
go get -u github.com/rocketlaunchr/react
Examples
The examples can be found here:
Uptime Timer
- How to create React class components
- How to pass props from parent to child
- How to use UnmarshalProps() and UnmarshalState()
- How to use state() and setState()
- How to create strongly-typed structured props and states
Event Handling
- How to create React functional components
- How to handle events (and pass extra arguments)
- How to create a Ref and interact with dom object directly
Desktop Application
- 100% written in Go
- Cross-platform (macOS, Win, Linux)
- Electron.js based
- How to bundle javascript dependencies using rollup.js
Performance Tips
- Use
-m
command line flag to instruct gopher.js to minify code. Then bundle+minify further with rollup.js xor Webpack/UglifyJS. A Webpack tutorial can be found here. - Apply gzip compression
- Use int instead of (u)int8/16/32/64
- Use float64 instead of float32
- Avoid importing
fmt
at all costs (including indirectly). Use fmtless instead. - Avoid importing
net/http
for http requests (including indirectly). Use gopherjs-xhr instead. - Until GopherJS supports Go1.13+, avoid using the standard libraries
context
package because it usesfmt
. Instead usecontext
fromforks
sub-package. - Avoid importing
honnef.co/go/js/dom
if possible. - Use react.JSFn() and use native javascript functions as much as possible.
- https://github.com/gopherjs/gopherjs/wiki/JavaScript-Tips-and-Gotchas
- See if jsgo is appropriate for your web-based project.
- To reduce file size, copy only what's required from
elements
sub-package. - For json unmarshaling, try slim-decoder or use json
Future Work
Other useful packages
- dataframe-go - Statistics and data manipulation
- dbq - Zero boilerplate database operations for Go
- electron-alert - SweetAlert2 for Electron Applications
- igo - A Go transpiler with cool new syntax such as fordefer (defer for for-loops)
- mysql-go - Properly cancel slow MySQL queries
- remember-go - Cache slow database queries
Legal Information
The license is a modified MIT license. Refer to LICENSE
file for more details.
ยฉ 2018-20 PJ Engineering and Business Solutions Pty. Ltd.
Final Notes
Feel free to enhance features by issuing pull-requests.