This repository was archived by the owner on May 1, 2025. It is now read-only.
File tree Expand file tree Collapse file tree 5 files changed +65
-6
lines changed
content/2.concepts/6.state-manegement Expand file tree Collapse file tree 5 files changed +65
-6
lines changed Original file line number Diff line number Diff line change
1
+ <template >
2
+ <CounterA />
3
+ <CounterB />
4
+ </template >
Original file line number Diff line number Diff line change
1
+ <script setup lang="ts">
2
+ const count = useState (' count' , () => 0 )
3
+ </script >
4
+
5
+ <template >
6
+ <div >
7
+ <h2 >Counter A</h2 >
8
+ <p >Count: {{ count }}</p >
9
+ <button type =" button" @click =" count++" >
10
+ Increment
11
+ </button >
12
+ </div >
13
+ </template >
Original file line number Diff line number Diff line change
1
+ <script setup lang="ts">
2
+ const count = useState (' count' , () => 0 )
3
+ </script >
4
+
5
+ <template >
6
+ <div >
7
+ <h2 >Counter B</h2 >
8
+ <p >Count: {{ count }}</p >
9
+ <button type =" button" @click =" count++" >
10
+ Increment
11
+ </button >
12
+ </div >
13
+ </template >
Original file line number Diff line number Diff line change
1
+ import type { GuideMeta } from '~/types/guides'
2
+
3
+ export const meta : GuideMeta = {
4
+ startingFile : 'app.vue' ,
5
+ features : {
6
+ fileTree : true ,
7
+ } ,
8
+ }
Original file line number Diff line number Diff line change 2
2
ogImage : true
3
3
---
4
4
5
- # State Management
5
+ # 状態管理
6
6
7
- <!-- TODO:
8
- - What is State Management?
9
- - Problems on SSR
10
- - How to implement State Management in a Nuxt.js app (useState)
11
- -->
7
+ Vue.js での 状態管理 (State Management) とは、アプリケーションでリアクティブな状態 (ステート) を管理することを言います。\
8
+ [ Vue.js 公式ドキュメント 状態管理] ( https://ja.vuejs.org/guide/scaling-up/state-management )
9
+
10
+ 複数のコンポーネント間で状態を共有する際、Vue.js ではリアクティビティー API を用いたシンプルな状態管理を行うことができます。\
11
+ [ Vue.js 公式ドキュメント リアクティビティー API によるシンプルな状態の管理] ( https://ja.vuejs.org/guide/scaling-up/state-management#simple-state-management-with-reactivity-api )
12
+
13
+ しかし、[ SSR の考慮] ( https://ja.vuejs.org/guide/scaling-up/state-management#ssr-considerations ) にも書かれているように、Nuxt で SSR を行っている場合には [ いくつかの問題] ( https://ja.vuejs.org/guide/scaling-up/ssr#cross-request-state-pollution ) が起こる可能性があります。
14
+
15
+ Vue.js の公式ドキュメントでは [ Pinia] ( https://pinia.vuejs.org/ ) と言う状態管理ライブラリを使う方法が紹介されていますが、Nuxt が提供する ` useState() ` コンポーザブル もその解決策の一つです。\
16
+ (もちろん、[ Nuxt で Pinia を使用する] ( https://nuxt.com/docs/getting-started/state-management#usage-with-pinia ) ことも可能です。)
17
+
18
+ ## useState()
19
+
20
+ [ useState() コンポーザブル] ( https://nuxt.com/docs/api/composables/use-state ) は SSR フレンドリーな状態管理と、コンポーネント間で状態を共有するためのシンプルな方法を提供します。\
21
+ ` useState() ` は共有状態を定義するための SSR フレンドリーな ` ref() ` です。\
22
+ 前述の通り、Vue.js のリアクティビティー API (e.g. ` ref() ` ) を用いてコンポーネントを跨いだ状態管理を SSR で行う場合、いくつかの問題が発生する可能性があります。\
23
+ そのため、Nuxt では ` <script setup> ` や ` setup() ` 関数の ** 外** では、` ref() ` での状態を定義せず、代わりに ` useState() ` を使用することがベストプラクティスとされています。
24
+
25
+ このプレイグラウンドの例では、` "count" ` をキーに ` CounterA ` コンポーネントと ` CounterB ` コンポーネントで状態を共有しています。\
26
+ ` CounterA ` によってレンダリングされたボタンをクリックしたときに、` CounterB ` のステートも更新されることに注目してみてください。
27
+
28
+ より詳細な説明は、[ Nuxt 公式ドキュメント 状態管理] ( https://nuxt.com/docs/getting-started/state-management ) を参照してください。
29
+
30
+ ::: note
31
+ ` useState() ` のデータは JSON にシリアライズされるため、クラス、関数、シンボルなど、シリアライズできないものを含まないことに注意が必要です。
32
+ :::
You can’t perform that action at this time.
0 commit comments