stated-bean is a light & scalable state management library with react hooks. Inspired by unstated-next
npm install stated-bean
- OOP: used with DI(denpendcy inject) framework togather
- Familiar API: just provider and hooks
- Small size: ~3kb (zipped ~1kb)
- Written in TypeScript
Stated Bean
import { StatedBean, Stated } from 'stated-bean';
@StatedBean()
export class Counter {
@Stated()
public count: number = 0;
increment = () => {
this.count++;
};
decrement = () => {
this.count--;
};
}
StatedBeanProvider
import { StatedBeanProvider } from 'stated-bean';
const App = () => {
return (
<StatedBeanProvider types={[Counter]}>
<div>
<CounterDisplay />
</div>
<CounterDisplay />
<StatedBeanProvider types={[Counter]}>
<CounterDisplay />
</StatedBeanProvider>
</StatedBeanProvider>
);
};
ReactDOM.render(<App />, document.getElementById('root'));
useStatedBean
import { useStatedBean } from 'stated-bean';
function CounterDisplay() {
const counter = useStatedBean(Counter);
if (counter === undefined) {
return null;
}
return (
<div>
<button onClick={counter.decrement}>-</button>
<span>{counter.count}</span>
<button onClick={counter.increment}>+</button>
</div>
);
}