Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon How do I configure Unstated Next to work with my existing React components
    Unstated Next React components state management install Unstated Next React state container React app setup useContainer method createContainer React Hooks


How do I configure Unstated Next to work with my existing React components


To configure Unstated Next to work with your existing React components, follow these steps:

Step 1: Install Unstated Next

1. Open your terminal and navigate to your React project directory.
2. Install Unstated Next using npm or yarn:

bash
   npm install unstated-next
   # or
   yarn add unstated-next
   

Step 2: Create a State Container

1. Create a new file for your state container. For example, `counter.js`:

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);

   export { CounterContainer };
   

Step 3: Use the State Container

1. In your React components, use the `useContainer` method to access the state and actions from the `CounterContainer`:

javascript
   import React from 'react';
   import { useContainer } from 'unstated-next';
   import { CounterContainer } from './counter';

   function CounterDisplay() {
     const { count } = useContainer(CounterContainer);
     return <p>Count: {count}</p>;
   }

   function CounterControls() {
     const { increment, decrement } = useContainer(CounterContainer);
     return (
       <div>
         <button onClick={decrement}>-</button>
         <button onClick={increment}>+</button>
       </div>
     );
   }

   function App() {
     return (
       <CounterContainer.Provider>
         <CounterDisplay />
         <CounterControls />
       </CounterContainer.Provider>
     );
   }

   export default App;
   

Step 4: Update Your App

1. Update your `index.js` file to include the `App` component:

javascript
   import React from 'react';
   import ReactDOM from 'react-dom';
   import App from './App';

   ReactDOM.render(
     <React.StrictMode>
       <App />
     </React.StrictMode>,
     document.getElementById('root')
   );
   

Step 5: Run Your App

1. Run your application using the following command:

bash
   npm start
   

Example Code

Here is the complete code example:

javascript
// counter.js
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);

export { CounterContainer };

// App.js
import React from 'react';
import { useContainer } from 'unstated-next';
import { CounterContainer } from './counter';

function CounterDisplay() {
  const { count } = useContainer(CounterContainer);
  return <p>Count: {count}</p>;
}

function CounterControls() {
  const { increment, decrement } = useContainer(CounterContainer);
  return (
    <div>
      <button onClick={decrement}>-</button>
      <button onClick={increment}>+</button>
    </div>
  );
}

function App() {
  return (
    <CounterContainer.Provider>
      <CounterDisplay />
      <CounterControls />
    </CounterContainer.Provider>
  );
}

export default App;

// index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';

ReactDOM.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
  document.getElementById('root')
);

This example demonstrates how to use Unstated Next to manage state in a React application. It provides a reusable state container and allows components to access and update the state using React Hooks.

Citations:
[1] https://github.com/jamiebuilds/unstated-next/issues/20
[2] https://www.geeksforgeeks.org/unstated-next-lightweight-state-management-library-for-reactjs-part-3-shopping-cart/
[3] https://blog.logrocket.com/state-management-with-unstated-next/
[4] https://css-tricks.com/managing-state-in-react-using-unstated-next/
[5] https://www.geeksforgeeks.org/unstated-next-lightweight-state-management-library-for-reactjs-part-1/