Nuxt/docs/content/1.docs/1.getting-started/7.state-management.md
Sébastien Chopin 90784f79d7
docs: new website design (#9007)
* docs: implement new website theme

* chore: rename dirs

* chore: update build

* lint fix

* chore: update deps

* fix: include node_modules in esbuild step

* chore: update deps

* Update .gitignore

* chore: update theme version

* up

* up

* fix: use svg for illustration

* chore: update to 0.0.12

* chore: force parse5 resolution

* stay with build

* feat: always display first home section

* Update yarn.lock

* chore: update theme

* fix lint

* docs: update home title

* chore: update website theme version

* Update docs/content/0.index.md

Co-authored-by: pooya parsa <pyapar@gmail.com>

* Update docs/content/0.index.md

Co-authored-by: pooya parsa <pyapar@gmail.com>

* up

* chore: bump theme version

* up

* chore: up

* up up and up

* chore: generate

* fix: boolean value

* feat: new images

* update again

* chore: up

* ouep

* chore: up

Co-authored-by: Daniel Roe <daniel@roe.dev>
Co-authored-by: Clément Ollivier <clement.o2p@gmail.com>
Co-authored-by: pooya parsa <pyapar@gmail.com>
2022-11-16 11:04:28 +01:00

2.5 KiB

navigation.icon description
uil:database Nuxt provides useState composable to create a reactive and SSR-friendly shared state.

State Management

Nuxt provides useState composable to create a reactive and SSR-friendly shared state across components.

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.

::ReadMore{link="/docs/api/composables/use-state"} ::

::alert{icon=👉} useState only works during setup or Lifecycle Hooks. :: ::alert{type=warning} Because the data inside useState will be serialized to JSON, it is important that it does not contain anything that cannot be serialized, such as classes, functions or symbols. ::

Best Practices

::alert{type=danger icon=🚨} Never define const state = ref() outside of <script setup> or setup() function.
Such state will be shared across all users visiting your website and can lead to memory leaks! :: ::alert{type=success icon=} Instead use const useX = () => useState('x') ::

Examples

Basic Usage

In this example, we use a component-local counter state. Any other component that uses useState('counter') shares the same reactive state.

<script setup>
const counter = useState('counter', () => Math.round(Math.random() * 1000))
</script>

<template>
  <div>
    Counter: {{ counter }}
    <button @click="counter++">
      +
    </button>
    <button @click="counter--">
      -
    </button>
  </div>
</template>

::LinkExample{link="/docs/examples/composables/use-state"} ::

::ReadMore{link="/docs/api/composables/use-state"} ::

Advanced

In this example, we use a composable that detects the user's default locale from the HTTP request headers and keeps it in a locale state.

::LinkExample{link="/docs/examples/other/locale"} ::

Shared State

By using auto-imported composables we can define global type-safe states and import them across the app.

export const useCounter = () => useState<number>('counter', () => 0)
export const useColor = () => useState<string>('color', () => 'pink')
<script setup>
const color = useColor() // Same as useState('color')
</script>

<template>
  <p>Current color: {{ color }}</p>
</template>