Skip to content

「状態管理」の質問 #83

Closed Answered by aster-mnch
tokuda109 asked this question in ハンズオン Q&A
Discussion options

You must be logged in to vote

@nanauda
ご質問ありがとうございます!
そして回答まで日が空いてしまい申し訳ありません 💦

ハンズオン当日の口頭解説の要点をまとめます。

コンポーネント内でのみリアクティブな値を使いたい場合はref(reacive)を使っておく
→他のコンポーネントで使うことが決まったらuseStateに切り出す

Nuxt における状態管理では基本的にその認識で大丈夫です 👌

少し補足すると、ref 関数でも以下の globalCount のように、グローバルな変数として初期化された値はコンポーネント間で値を共有することができます。
ただし、これはクロスリクエスト状態汚染という不具合を混入しやすいので、基本的に useState を使うことが推奨されます。
(実は useState も内部的に ref を使っており、この問題を解消する形で設計されています)

import { ref } from 'vue'

// モジュールスコープで生成されたグローバルな状態
const globalCount = ref(1)

export function useCount() {
  // コンポーネント毎に生成されたローカルな状態
  const localCount = ref(1)

  return {
    globalCount,
    localCount
  }
}

また、Vue.js, Nuxt の両方で状態管理をするための Pinia というライブラリもございます。
Pinia でも上記の問題を念頭に設計されていますので安全に使うことができます。


なお、こ…

Replies: 1 comment 1 reply

Comment options

You must be logged in to vote
1 reply
@aster-mnch
Comment options

Answer selected by ubugeeei
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
3 participants