Unstated Next is a lightweight state management library for React that uses React's built-in Context API and Hooks. Here is a concise example of how to use Unstated Next to manage state across multiple components:
Creating a State Container
First, we create a state container using the `createContainer` function from Unstated Next:
javascript
import { createContainer } from 'unstated-next';
function useCounter() {
const [count, setCount] = useState(0);
const increment = () => setCount(count + 1);
const decrement = () => setCount(count - 1);
return { count, increment, decrement };
}
const CounterContainer = createContainer(useCounter);
The `useCounter` function defines the state and logic for a counter, and `createContainer` wraps it to create a reusable state container.
Using the State Container
Now we can use the `CounterContainer` in our components:
javascript
function CounterDisplay() {
const { count } = CounterContainer.useContainer();
return <p>Count: {count}</p>;
}
function CounterControls() {
const { increment, decrement } = CounterContainer.useContainer();
return (
<div>
<button onClick={decrement}>-</button>
<button onClick={increment}>+</button>
</div>
);
}
function App() {
return (
<CounterContainer.Provider>
<CounterDisplay />
<CounterControls />
</CounterContainer.Provider>
);
}
The `CounterDisplay` and `CounterControls` components both use the `useContainer` method to access the state and actions from the `CounterContainer`. The `CounterContainer.Provider` component wraps the app and provides the shared state to its children.
This way, the state is managed centrally in the `useCounter` function, and any component that needs access to the counter state or actions can simply use the `useContainer` method to get what it needs.[1][2][3]
Citations:[1] https://github.com/jamiebuilds/unstated-next
[2] https://css-tricks.com/managing-state-in-react-using-unstated-next/
[3] https://blog.logrocket.com/state-management-with-unstated-next/
[4] https://www.geeksforgeeks.org/unstated-next-lightweight-state-management-library-for-reactjs-part-3-shopping-cart/
[5] https://www.npmjs.com/package/unstated-next/v/1.0.0?activeTab=readme