Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

github.com/luisvinicius167/godux

Package Overview
Dependencies
Alerts
File Explorer
Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

github.com/luisvinicius167/godux

  • v0.0.0-20201004124859-70bcb3c51748
  • Source
  • Go
  • Socket score

Version published
Created
Source

godux

Join the chat at https://gitter.im/luisvinicius167/godux Go Report Card

State Management for Go Backend applications inspired by Redux.

Godux

╔═════════╗       ╔══════════╗       ╔═══════════╗       ╔═════════════════╗
║ Action  ║──────>║ Reducer  ║ ────> ║   Store   ║ ────> ║   Application   ║
╚═════════╝       ╚══════════╝       ╚═══════════╝       ╚═════════════════╝
     ^                                                            │
     └────────────────────────────────────────────────────────────┘

Install

  • Go: go get github.com/luisvinicius167/godux

Data Flow

godux gives go unidirectional data flow:

  • The Action returns a small map with specific directions that are dispatched to a Reducer.
  • The Reducer is a pure function (pure functions don't change original arguments) if relevant to it returns a new Value.
  • The Value becomes the new State of the Store.

Principles:

  • Global application state is held in the Store, as a single map.
  • State is ready-only (only change it only by replacing it with the Reducer).
  • Changes are made with pure functions - Actions/Reducers that do not change the actual object but make a changed copy.

Store:

A Store is basically a container that holds your application state.

    store := godux.NewStore()
	store.Setstate("count", 1)
    store.Setstate("Title", "I like godux!")
Action

Actions are just pure functions which pass on their inputs when they're dispatched. Actions are stored on the godux map as godux.Action.

    increment := func(number int) godux.Action {
		return godux.Action{
			Type:  "INCREMENT",
			Value: number,
		}
	}

Reducers

As in Redux:

"Actions describe the fact that something happened, but don’t specify how the application’s state changes in response. This is the job of a reducer".

Reducers are pure functions that take in actions and the state of the store as inputs and leave them all as they came in (aka. pure)-- especially the original state of the store must not be modified (it's accessed by store.GetState)).

    // reducer function
	reducer := func(action godux.Action) interface{} {
		switch action.Type {
		case "INCREMENT":
			return store.GetState("count").(int) + action.Value.(int)
		case "DECREMENT":
			return action.Value.(int) - store.GetState("count").(int)
		default:
			return store.GetAllState()
		}
	}
	// Add your reducer function to return new values basend on your state
	store.Reducer(reducer)
Dispatch

Dispatching an action is very easy.

    // Receive new value
	newCount := store.Dispatch(increment(1)) // return 2

API Reference

  • Store:
    • godux.newStore(): Create a single store with the state of your application (should only be used once).
    • godux.SetState(name string, value interface{}): Sets the state of the store.
    • godux.GetState(name string): Return a state's value.
    • godux.GetAllState(): Return the whole state as a map.
  • Reducer:
    • store.Reducer(func(action godux.Action)): Adding a reducer function to your Store.
  • Dispatch:
    • store.Dispatch(action godux.Action): Dispatching an action to your Reducer.
  • Action:
    • godux.Action( Type string, Value interface{}): Adding an easily available Action.

License

MIT License.

FAQs

Package last updated on 04 Oct 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc