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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Vuex

Vuexは、Vue.js アプリケーションのための状態管理ライブラリです。アプリケーション内で使用するコンポーネントのための集中データストアを提供。コンポーネント同士でデータをやり取りし、処理のフローを一貫させたり、データの見通しを良くすることができます。

Q&A

解決済

1回答

2918閲覧

Vuex がリアクティブにならない

nico25

総合スコア830

Vuex

Vuexは、Vue.js アプリケーションのための状態管理ライブラリです。アプリケーション内で使用するコンポーネントのための集中データストアを提供。コンポーネント同士でデータをやり取りし、処理のフローを一貫させたり、データの見通しを良くすることができます。

0グッド

0クリップ

投稿2020/04/18 07:32

編集2020/04/24 02:13

イメージ説明

上段は Array と、その合計値です。Button を押すと要素が追加されます。問題なくリアクティブとして動作しています。

下段は二分探索木と、その合計値です。Button を押すと要素が追加されます。値が更新されたり、されなかったりでマチマチになってしまっています。

ソースコードは、以下の通りになります。

調べたこと

Vuex の公式ドキュメントを見たのですが、ふんわりとしか書かれていませんでした。他にも当たって見たのですが、これというものが見当たらず、どの資料に当てれば良いか、窮しております。

Vuex を利用するとストア内に "ゲッター" を定義することができます。それらをストアの算出プロパティと考えることができます。算出プロパティと同様に、ゲッターの結果はその依存関係に基づいて計算され、依存関係の一部が変更されたときにのみ再評価されます。
ゲッター - Vuex

何か思い当たるものがありましたら、ご教示いただけると幸いでございます。

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

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

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

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

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

guest

回答1

0

自己解決

初歩的なところでつまづいていました orz

原因は、 state に付随するオブジェクトにプロパティを追加する際に、そのまま代入 = してしまっていたことです。

js

1 2 ... 3 4 // 誤 5 // node.left = { value: newValue } 6 // 正 7 Vue.set(node, 'left', { value: newValue }) 8 9 ... 10 11 // 誤 12 // node.right = { value: newValue } 13 // 正 14 Vue.set(node, 'right', { value: newValue }) 15

Vue.set を使うことで改善しました。木の合計値もちゃんと更新されました(反応しないだろうと思っていたので、どうやって変更の検知を実装しているのか気になります...)。

そのほかにも、いくつかやり方はあるようです。

js

1# 1 2Vue.set(obj, 'newProp', 123) 3 4# 1' SFC 内の場合 5this.$set(obj, 'newProp', 123) 6 7# 2 Vuex 内の場合 8state.obj = { ...state.obj, newProp: 123 }

投稿2020/04/24 02:12

nico25

総合スコア830

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問