The easiest way to implement global state management in your Next.js application is the React Context API.
I made a new file called ContextProvider.js and created a Context object called MyContext:
import React, { useState, useContext, useEffect } from 'react';
const MyContext = React.createContext();
export function useMyContext() {
return useContext(MyContext);
}
export function MyProvider({ children }) {
const [myValue, setMyValue] = useState(false);
return (
<MyContext.Provider value={{myValue, setMyValue}}>
{children}
</MyContext.Provider>
);
}
Once this is done, go back to pages/_app.js
and wrap your component with the context provider:
import { MyProvider } from '../contexts/MyProvider';
function MyApp({ Component, pageProps }) {
return (
<MyProvider>
<Component {...pageProps} />
</MyProvider>
);
}
export default MyApp;
Now I can use the state within MyContext in every part of the application.
Make sure to be careful about how much you put into Context. You don’t want unnecessary re-renders across pages when you could just share them across specific components.