問題: vuexstore から取得したオブジェクトの場合、オブジェクトを直接印刷するとコンテンツが存在しますが、オブジェクト内のプロパティを印刷すると未定義になります。

問題: vuexstore から取得したオブジェクトの場合、オブジェクトを直接印刷するとコンテンツが存在しますが、オブジェクト内のプロパティを印刷すると未定義になります。

理由:

  • アクションは非同期操作であり、コミット メソッドで出力することが重要であるはずです。
    なぜオブジェクトを出力できるのかというと、オブジェクト変数はアドレスであるため、オブジェクトは展開時に展開されます。オブジェクト
    変数はメモリ内のオブジェクトのアドレスを格納し、通常のデータ変数は変数の実際の値です。
  • 実際、取得したオブジェクトは印刷する時点では空のオブジェクトですが、展開するとコミット操作が完了しているため、オブジェクトは内部の値を取得するため、印刷時にオブジェクト内のオブジェクトを確認できます。オブジェクトのプロパティ。
  • ただし、通常の型は出力された時点のものであるため、ストアから取得したオブジェクトの特定の属性 (allQuestionList.value など) を出力する場合、それは単なる通常の出力であり、コミット操作が完了していません。まだなので価値はありません。

解決策: タイマーを追加する

const allList = computed(
      () => store.state.ListModule.allListInfo
    )
console.log(allList.value)  //没有值

setTimeout(() => {
    
    
     console.log(allList.value)  //有值
    }, 1000

ただし、タイマーを追加した後は、タイマーに書き込んだ内容(変数や関数など)を外側のスコープで取得して使用することができないため、ここでは必要なデータをタイマー内のlocalStorageを通じてローカルにキャッシュし、外側のスコープにキャッシュします。レイヤー機能では、ローカルキャッシュに格納されているデータを取得することで、このようにデータを取得することができます。

Supongo que te gusta

Origin blog.csdn.net/weixin_53737663/article/details/127187743
Recomendado
Clasificación