1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Vue3] composablesと状態管理の記述パターンと比較

1
Last updated at Posted at 2024-01-06

Vue.jsにおけるrefとuseStateの挙動の理解

背景

Vue.jsのリアクティブな状態管理には、refuseState などのAPIが利用されます。これらのAPIの挙動を理解するため、関数外での ref 宣言がアプリケーションにどのような影響を与えるのかを整理しました。

ソースコードの実験

以下のGitHubリポジトリには、refuseState を用いたサンプルコードがあります。このコードをクローンして、各APIの挙動を実際に確かめてみることができます。
GitHubリポジトリへのリンク

実験結果と解析

実験結果の画像

主なポイント

  • useState:
    useState はアプリケーション全体で状態を共有します。これにより、アプリケーションの異なる部分間で同じ状態を利用することができます。

  • コンポーネント内のref:
    ref をコンポーネント内で宣言すると、そのスコープはそのコンポーネントに限られます。他のコンポーネントで同じcomposablesを使用しても、状態は共有されません。

  • 関数外のref宣言:
    関数の外部で ref を宣言すると、その状態はアプリケーション全体で共有されます。これにより、異なるコンポーネント間で一貫したデータを持つことが可能です。

気づきとベストプラクティス

ダブルクォーテーションの表示

  • 分割代入をしない場合、テンプレートに直接 ref オブジェクトを表示しようとすると、ダブルクォーテーションが表示されることがあります。これは、ref で宣言された message プロパティがオブジェクトとして解釈されるためです。

  • 正しい表示のためには、テンプレートに渡す際には文字列を直接指定することが重要です。例えば、ref オブジェクトの内部プロパティに value を使用して直接アクセスします。

valueにアクセスすることでダブルクォーテーション回避
<!-- refオブジェクトの内部プロパティに直接アクセスする例 -->
<p>{{ message_2.message.value }}</p>

ただ、基本的には分割代入を使うと思うので大丈夫かと思います。
個人的にいろいろ試したりする中で気づいた違いで戸惑った点でした。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?