Announcing: new and light state manager “Jon”
priolo22
Posted on April 21, 2021
Introduction
So I started using the native REACT methods REDUCER and PROVIDERS for state management
... eventually I ended up with a light lib inspired by VUEX!
The great thing about VUEX (or FLUX) is that you have a solid structure:
The State
is immutable,
The Actions
change theState
,
The View
intercepts theState
changes and calls the Actions
.
Explicitly expressed by a simple object:
const store = {
state: { ... },
getters: { ... },
actions: { ... },
mutators: { ... },
}
The idea is of a "single source of truth" so I didn't use classes (which if I'm an OOP enthusiast)
as close as possible to REACT
I was surprised how useful it was in my projects so I decided to "publish" it:
Jon
I also made a template:
SPA-Template
Simple DEMO
Installation
npm install @priolo/jon
Create the store:
my_app/myStore.js
export default {
state: {
value: "init value",
},
getters: {
getUppercase: (state) => state.value.toUpperCase(),
},
actions: {
addAtEnd: (state, char, store) => {
store.setValue(state.value + char)
}
},
mutators: {
setValue: (state, value) => ({value})
}
}
Create PROVIDER
my_app/index.js
import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
import { MultiStoreProvider } from '@priolo/jon';
import myStore from "./myStore"
const rootElement = document.getElementById("root");
ReactDOM.render(
<MultiStoreProvider setups={{myStore}}>
<App />
</MultiStoreProvider>,
rootElement
);
Use STORE
my_app/App.js
import { useStore } from "@priolo/jon";
import React from "react";
export default function App() {
const { state, setValue, addAtEnd, getUppercase } = useStore("myStore")
const handleClickIncrement = e => addAtEnd("!")
return (<div>
<h1>{state.value}</h1><h2>{getUppercase()}</h2>
<input
value={state.value}
onChange={(e)=>setValue(e.target.value)}
/>
<button
onClick={handleClickIncrement}
>add !</button>
</div>);
}
Conclusion
The demo is very simple, but I've used Jon on fairly large projects and haven't regretted it.
Furthermore, they are simple PROVIDERS so for debugging you can use REACT Tool:
Let me know what you think!
Posted on April 21, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.