ホームページ  >  記事  >  ウェブフロントエンド  >  Vuex で値の変更が観察されない場合の回避策は何ですか?

Vuex で値の変更が観察されない場合の回避策は何ですか?

亚连
亚连オリジナル
2018-06-02 11:46:391422ブラウズ

以下では、Vuex で値の変化を観察できないことに基づいた解決策を共有します。これは優れた参考値であり、皆さんのお役に立てれば幸いです。

メインルーティングビューをまたぐ場合、Vuexのステータス値は常にメモリに保存されているため、コンポーネントビューをリロードするとコンポーネントがステータス値の変化を検出できず、業務エラーが発生する場合があります。論理。

一般的なヘッダー コンポーネントにはグローバル タスク ステータス値があり、他のコンポーネントはこのタスク値に基づいて更新する必要があると仮定します。より可能性の高い状況は、タスク ステータス値が非同期で読み込まれるため、ビジネス ロジックを次のように記述する必要があります。これ:

computed : {
 task () {
  return this.$store.state.task
 } 
},
watch : {
 task : {
   deep: true,
   handler (val) {
    // 由于是异步载入,所以只能在状态值的变化时执行渲染操作
    // 绝不可在mounted中执行render方法
    this.render(val)
   }
 } 
}

ただし、上記の理由により、ビューが初めてロードされるときは、Vuex 状態値がメモリに保存されていないため、レンダリングは正常に行われます。ビューの切り替えが発生した後、タスクのステータス値は再ロードされますが、タスクは変更されていないため、render メソッドは呼び出されず、コンポーネントはレンダリング プロセスを完了できません。

タスクの値を強制的に変更するには、タイムスタンプの粒度がまだ粗すぎると感じる場合は、次のように乱数を組み合わせて使用​​する方法があります。 :

watch: {
 taskId : {
   handler (val) {
    // 从v-model获取到的新值
    let taskId = this.taskId
    // 提交新值变化
    this.$store.commit(TASK_ID, 
    {
     id : taskId,
     // 添加时间戳
     time : Date.now().valueOf(),
     // 添加随机数
     random : Math.random()
    })
   }
 }
}

上記の処理後、taskIdの割り当てが発生している限り、Vuexの状態変化がトリガーされるため、コンポーネントがロードされるかtaskIdの値が変化するたびにrenderメソッドが実行されます。

上記は私があなたのためにまとめたものです。

関連記事:

jsの document.write と document.writeln の違い

Javascript のプロトタイプと __proto__ の関係の詳細な説明

Node.JS のループで空ではないフォルダーとサブディレクトリ すべてのファイル

以上がVuex で値の変更が観察されない場合の回避策は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。