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

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

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

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

Vuex

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1110閲覧

VuexのState変更をGettersで即時反映させたい

yamayamak

総合スコア131

Vue.js

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

Vuex

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1グッド

1クリップ

投稿2020/03/12 09:53

編集2020/03/12 13:02

VuexのStateデータをGettersで取得し、親VueのHTMLに表示させています。
複数の子Vueで変更して表示させるために、VuexのStateを変更すれば、親Vueの表示文字が変更されるようにしています。
親Vueでは、VuexのGetters関数をそのまま、{{ getMessage }}と記載し表示しています。

ただ、子Vueで「tensorflowのModel定義とCompile」を実施させると、該当処理が終わるまで数秒も親Vueの表示が変更されません。
StoreでConsole.logを見るとStateのデータはすぐに変更されているように表示されますが、親VueでStateの変更が即時反映されずにGetters関数が働いていないように見えています。

親VueでVuexのState変更を即事Gettersで認識できる方法をご教授をお願いします。
(子Vueから何かしらのプッシュできるような方法でもあればお願いします。)

バージョンを調べて見たら以下でした。
npm vue --version
=> 6.14.2
npm vuex --version
=> 6.14.2

//******** 親Vue ******** <template> <div id="app"> <h1>{{ getMessage }}</h1> </div> </template> <script> computed: { ...mapGetters([ 'getMessage' ]) } </script> //******** 子Vue ******** <script> method: { setMessage () { this.$store.dispatch('setMessage', 'すぐにメッセージを表示したい。') ★★★★★データなどの重い処理★★★★★ } } </script> //******** Vuex Storeコード ******** <script> state: { dispMessage: '' }, getters: { getMessage (state) { return state.dispMessage } }, mutation: { [SET_MESSAGE] (state, payload) { state.dispMessage = payload console.log('SET_MESSAGE:' + payload) } } </script>

tensorflowのModel定義とCompile

const model = tf.sequential() model.add(tf.layers.conv2d({ inputShape: [this.height, this.width, 3], kernelSize: 3, filters: 32, activation: 'relu' })) model.add(tf.layers.conv2d({kernelSize: 3, filters: 64, activation: 'relu'})) model.add(tf.layers.maxPooling2d({poolSize: 2, strides: 2})) model.add(tf.layers.dropout(0.25)) model.add(tf.layers.flatten()) model.add(tf.layers.dense({units: 128, activation: 'relu'})) model.add(tf.layers.dropout(0.5)) model.add(tf.layers.dense({units: this.output_classes, activation: 'softmax'})) const optimizer = tf.train.adadelta() model.compile({ optimizer: optimizer, loss: 'categoricalCrossentropy', metrics: ['accuracy'] }) return model
s.k👍を押しています

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

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

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

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

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

guest

回答1

0

自己解決

重たい処理をする前にタイマーをセットして反映させる時間を取るようにしました。
基本的に重たい処理の時は反映がUI周りが後回しになるようなことが多くありました。

setTimeout(該当処理, 200)

該当の処理は重い処理を別メソッド関数に分けて呼び出すことにしました

投稿2020/03/27 11:03

yamayamak

総合スコア131

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問