Skip to content

Build components that render to HTML in Go, similar to React.js

License

Notifications You must be signed in to change notification settings

mbertschler/blocks

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Blocks rendering library

status stable go.dev reference

Blocks is a Go library for writing HTML similar to React components.

Example

Applications can rendern their user interface like in this example examples/html/html.go. You can run it by running cd examples/html && go run html.go. Full code of this demo:

package main

import (
	"fmt"

	"github.com/mbertschler/blocks/html"
)

func main() {
	root := html.Blocks{
		// Option 1: directly add an element
		html.Doctype("html"),
		html.Html(nil,
			// Option 2: struct that implements Block interface (RenderHTML() Block)
			HeadBlock{html.Name("key").Content("super")},
			// Option 3: function that returns a Block
			BodyBlock("Hello, world! :) <br>"),
		),
	}
	out, err := html.RenderString(root)
	if err != nil {
		fmt.Println("Error:", err)
	}
	fmt.Println(out)

	out, err = html.RenderMinifiedString(root)
	if err != nil {
		fmt.Println("Error:", err)
	}
	fmt.Println(out)
}

type HeadBlock struct {
	html.Attributes
}

func (h HeadBlock) RenderHTML() html.Block {
	return html.Head(nil,
		html.Meta(h.Attributes),
	)
}

func BodyBlock(in string) html.Block {
	return html.Body(nil,
		html.Main(html.Class("main-class\" href=\"/evil/link"),
			html.H1(nil,
				html.Text(in),
				html.Br(),
				html.UnsafeString(in),
			),
		),
	)
}

License

Blocks is released under the Apache 2.0 license. See LICENSE.

About

Build components that render to HTML in Go, similar to React.js

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages