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

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

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

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

Vuex

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

Q&A

1回答

709閲覧

Vuexでstateの変更がDOMに反映されない

honyara

総合スコア0

Vue.js

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

Vuex

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

0グッド

0クリップ

投稿2021/06/16 23:11

前提・実現したいこと

Vuexのstateの値をcomponentで変更した際に、変更した内容をリアルタイムにDOMに反映したい。

環境

  • Vue 3
  • WSL2 + Docker

npmPackages

1npmPackages: 2 @vue/babel-helper-vue-jsx-merge-props: 1.2.1 3 @vue/babel-helper-vue-transform-on: 1.0.2 4 @vue/babel-plugin-jsx: 1.0.6 5 @vue/babel-plugin-transform-vue-jsx: 1.2.1 6 @vue/babel-preset-app: 4.5.13 7 @vue/babel-preset-jsx: 1.2.4 8 @vue/babel-sugar-composition-api-inject-h: 1.2.1 9 @vue/babel-sugar-composition-api-render-instance: 1.2.4 10 @vue/babel-sugar-functional-vue: 1.2.2 11 @vue/babel-sugar-inject-h: 1.2.2 12 @vue/babel-sugar-v-model: 1.2.3 13 @vue/babel-sugar-v-on: 1.2.3 14 @vue/cli-overlay: 4.5.13 15 @vue/cli-plugin-babel: ~4.5.0 => 4.5.13 16 @vue/cli-plugin-eslint: ~4.5.0 => 4.5.13 17 @vue/cli-plugin-router: ~4.5.0 => 4.5.13 18 @vue/cli-plugin-vuex: 4.5.13 19 @vue/cli-service: ~4.5.0 => 4.5.13 20 @vue/cli-shared-utils: 4.5.13 21 @vue/compiler-core: 3.0.11 22 @vue/compiler-dom: 3.0.11 23 @vue/compiler-sfc: ^3.0.0 => 3.0.11 24 @vue/compiler-ssr: 3.0.11 25 @vue/component-compiler-utils: 3.2.0 26 @vue/devtools-api: 6.0.0-beta.11 27 @vue/preload-webpack-plugin: 1.1.2 28 @vue/reactivity: 3.0.11 29 @vue/runtime-core: 3.0.11 30 @vue/runtime-dom: 3.0.11 31 @vue/shared: 3.0.11 32 @vue/web-component-wrapper: 1.3.0 33 eslint-plugin-vue: ^7.0.0 => 7.9.0 34 vue: ^3.0.0 => 3.0.11 35 vue-eslint-parser: 7.6.0 36 vue-hot-reload-api: 2.3.4 37 vue-loader: 15.9.7 (16.2.0) 38 vue-router: ^4.0.0-0 => 4.0.8 39 vue-style-loader: 4.1.3 40 vue-template-es2015-compiler: 1.9.1 41 npmGlobalPackages: 42 @vue/cli: 4.5.12

解決方法をお聞きしたいこと

下記ソースコードで、画面上の数値がカウントアップされていきませんでした。
mutationsのincrementを呼び出す形にもしてみましたが、結果は同様でした。
また、いずれの場合でもコンソール上ではカウントアップされていることが確認できます。

何故、画面に更新された値が反映されないのでしょうか。また反映させる方法はありますでしょうか。

ソースコード

main

1import { createApp } from 'vue' 2import App from './App.vue' 3import router from './router/index.js' 4import store from './store.js' 5 6const app = createApp(App) 7 8app.use(store) 9app.use(router) 10app.mount('#app')

store

1import { createStore } from 'vuex' 2 3export default createStore({ 4 state: { 5 count: 2 6 }, 7 mutations: { 8 increment(state) { 9 state.count++ 10 } 11 }, 12 actions: { 13 }, 14 modules: { 15 } 16}) 17

Home

1<template> 2 <div class="home"> 3 4 <p>{{ count }}</p> 5 <p>{{ this.$store.state.count }}</p> 6 <button @click="increment">+1</button> 7 <button @click="decrement">-1</button> 8 9 </div> 10</template> 11 12<script> 13 14export default { 15 name: "Home", 16 computed: { 17 count() { 18 return this.$store.state.count; 19 }, 20 }, 21 methods: { 22 increment() { 23 this.$store.state.count++; 24 console.log(this.$store.state.count); 25 // this.$store.commit("increment"); 26 }, 27 decrement() { 28 this.$store.state.count--; 29 console.log(this.$store.state.count); 30 }, 31 }, 32}; 33</script> 34

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

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

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

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

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

guest

回答1

0

Vueでは、テンプレートの中にthisが代入されることはないですよ。
this.$storeはあくまでプロパティ、メソッド内部での操作です。

<template> <div class="home"> <p>{{ count }}</p> <p>{{ state.count }}</p> <button @click="increment">+1</button> <button @click="decrement">-1</button> </div> </template>

投稿2021/06/17 00:10

FKM

総合スコア3647

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

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

honyara

2021/06/17 23:09 編集

コメントありがとうございます。<p>{{ this.$store.state.count }}</p>に関しては消し忘れでした。 質問がわかりづらくなり申し訳ありませんが、{{ count }}の回数が画面上で変化していかない状態を解決したいと思っています。
FKM

2021/06/18 05:06 編集

メソッドから値を返してないですね。メソッドはあくまで値を計算したり、処理したりするためのものなので、変数の場合返す処理が必要になります。値を動かさないことには算出プロパティは反応しません。 this.count = count をメソッド末尾に記入してもだめでしょうか。
honyara

2021/06/19 01:42

this.count = this.$store.state.count++;を記入しましたが、「computed property "count" is readonly.」の警告文が表示され、カウントも変化しませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問