react-hawk
v0.0.6-development
Published
State management library for react
Downloads
17
Readme
About
This library is for educational purposes and is not intended for production use.
Concepts were originally introduced by recoiljs
This is an attempt to break down the library and reconstruct it.
In the process coming away with a better understanding of the state lifecycle of react.
Design Goals
- Lightweight global state management
- Recompute state only when the state dependency changes
- Re-render components only when the state dependency changes
- A
hawk
oratom
is a single piece of global state - A
hawkeye
orselector
computes a value based on one or morehawk
s useHawkState
to access current value and subscribes / unsubscribes to the hawk stateuseHawkSetState
dispatches changes tohawk
s andhawkeye
s throughout the application
Install
yarn add react-hawk
Usage
You can import the generated bundle to use the whole library generated by this starter:
import React from 'react';
import { hawk, hawkeye, useHawkState, useHawkSetState } from 'react-hawk';
const counterState = hawk({
key: 'counter',
default: 0
});
const isEvenState = hawkeye({
key: 'isEven',
get: ({ get }) => {
const count = get(counterState)
return Boolean(count % 2) ? 'odd' : 'even'
}
})
const useIncrease = () => {
const setCounter = useHawkSetState(counterState)
const increase = (n = 1) => {
setCounter(count => count + n)
}
return increase
}
const useDecrease = () => {
const setCounter = useHawkSetState(counterState)
const decrease = (n = 1) => {
setCounter(count => count - n)
}
return decrease
}
export const Counter = () => {
const count = useHawkState(counterState)
const even = useHawkState(isEvenState)
const decrease = useDecrease()
const increase = useIncrease()
return (
<>
<button onClick={() => decrease()}>-</button>
{count} is {even}
<button onClick={() => increase()}>+</button>
</>
)
}
Credits
Made with :heart: by @rphansen91 and all these wonderful contributors (emoji key):
Recoil facebookexperimental/Recoil
This project follows the all-contributors specification. Contributions of any kind are welcome!