質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Q&A

解決済

1回答

1687閲覧

Vue3でreactiveなオブジェクトをletで作成して良いのか?

landy77

総合スコア1614

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

0グッド

1クリップ

投稿2022/08/04 15:57

前提

タイトルのとおりですがVue2で言うと下記で言う「test」があるとします。

vue2

1data:(){ 2 return { 3 test:{ 4 a:1, 5 b:2, 6 }, 7 ] 8}

Vue3で書くと

vue3

1const test = reactive({ 2 a:0, 3 b:0, 4});

の様な感じになると思います。

例えばこの「test」をStorageにJSON.parse等で保存します。

vue3

1sessionStorage.setItem('test',JSON.stringify(test));

これは当然保存できます。
ブラウザを見て普通に入っています。

で問題なのはそれを戻す際に

vue3

1test = JSON.parse(sessionStorage.getItem('test'));

を実行すると当然ですが「test」はconstだとエラーが発生します。

で「test」をconstではなくてletで宣言すると普通にまるごとオブジェクトを戻せるんですが、Vue3の記述がどれを見ても今のところは必ずreactiveな変数は「const」で記述されているように見えました。

私のやったReactiveな変数をletで記載するのは出来るけどやめたほうが良いのか?

それともたまたま見た例がconstばかりだっただけで別に構わないのか?

ダメであればこういう際は通常どうするべきなのか?

行き当たりばったりでやってきたのでこれが大丈夫なのかダメなのか判断できなかったので質問させていただきます。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

letで宣言しても問題ないのか
結論としてh「let」でも実装としては、問題ありません。
ただし、「const」での定義は定数を表すので、「test」に代入しようとしてもエラーが発生します。
これは、「const」定義時に代入された値が保証された形になります。

「let」で定義した場合は、「test」に代入がし放題ですので、「const」定義で初期化後に「test」に対して何らかの値が入力されてもそのまま動作します。

「test」が常に「reactive({})」のインスタンスであることが保証できるのであれば、「const」だろうと「let」(スコープに気を付ける)だろうとどちらでも問題ありません。

ですが、大事なのは、「test」が呼ばれる際に常に「reactive({})」が代入された状態が保証されていることです。
ですので、推奨は「const」による定義になります。

備考1.sessionStorageに登録する値について
「sessionStorage」に「reactive」のインスタンスを与えるのはあまりよくないと思います。
データ部のみを突っ込んだ方がよいかと思います。

備考2.vue2におけるreactive相当のapi
vue2におけるreactive相当のAPIは「observable」です。
ご掲示いただいたソースのものとは違います。
「reactive」や「observable」は基本的にstateストアを形成します。

投稿2022/08/05 04:52

編集2022/08/05 04:53
Matsumon0104

総合スコア1005

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問