Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon How do I configure Unstated Next to work with my existing React components


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/