useState composable to create a reactive and SSR-friendly shared state across components.
Understanding useState
useState is an SSR-friendly ref replacement. Its value will be preserved after server-side rendering (during client-side hydration) and shared across all components using a unique key.
Best Practices
Basic Usage
In this example, we use a component-local counter state. Any other component that usesuseState('counter') shares the same reactive state.
app/app.vue
To globally invalidate cached state, see the
clearNuxtState utility.Initializing State
Most of the time, you’ll want to initialize your state with data that resolves asynchronously. You can use theapp.vue component with the callOnce utility to do so.
app/app.vue
Shared State Pattern
By using auto-imported composables, you can define global type-safe states and import them across the app.composables/states.ts
app/app.vue
Advanced Usage
You can create more complex state management patterns by combininguseState with other composables and Vue features.
app/composables/locale.ts
Using Pinia
For more complex state management needs, you can leverage the Pinia module to create a global store and use it across the app.Make sure to install the Pinia module with
npx nuxt module add pinia.Third-Party Libraries
Nuxt is not opinionated about state management, so feel free to choose the right solution for your needs. Popular integrations include:- Pinia - The official Vue recommendation
- Harlem - Immutable global state management
- XState - State machine approach with tools for visualizing and testing your state logic