jedisdb
redis like key-value state management solution for React
Reactive. Redux alternative. Simple and powerful global state management system, accessible through every component.
Features ?
- Reactive
- State accessable through every components
- no reducer, no action needed
- small bundle size
Basic Usage
npm i jedisdb
yarn add jedisdb
happy hacking
import React from 'react'
import useJedis from 'jedisdb'
const Counter = () =>{
/*
if a key is not present in jedis, useJedis('myKey', fallbackValue) will create create that key in jedisdb and then it will return that jedis object,
if key is present it will simply return that jedis object
if we don't pass fallbackValue it will create jedis object with value undefined
*/
const counter = useJedis('counter', 0)
return (
<div>
<h1>My counter</h1>
{counter.state}
<button onClick={()=>{ counter.state++ }}>+</button>
</div>
);
}
Demo:
Counter Codesandbox.
Shopping Cart Codesandbox.
useJedis
returns a react hook so it can only used in react functional components,
selectState
has no side effects, it can be used anywhere,
createState
creates jedis object without any side effects.
demo: Accessing value in JS funciton Codesandbox.
Best Practice
use createState
to create jedis object and then use useJedis
to access it, is considered best practice
//myGlobalHook.js
//create jedis object
import {createState} from 'jedisdb'
createState({
theme: 'dark',
uesrLevel: 'admin',
counter: 7
})
//app.js
//import jedis object in app
import React from 'react';
import Main from './main';
require('./myGlobalHook')
function App() {
return (
<Main />
);
}
export default App;
//counter.js
//access anywhere
import React from 'react';
import useJedis from "jedisdb";
function Counter() {
const counter = useJedis('counter') //no need to pass fallback value
return (
<>
{counter.state}
<button onClick={()=>{ counter.state++ }}>+</button>
</>
);
}
export default Counter;
demo: Codesandbox