ホームページ > ウェブフロントエンド > フロントエンドQ&A > vueで取得した値が最新ではありません

vueで取得した値が最新ではありません

WBOY
リリース: 2023-05-24 13:45:40
オリジナル
831 人が閲覧しました

Vue は、MVVM パターンに基づくフロントエンド フレームワークで、インタラクティブな単一ページ アプリケーションの構築に使用されます。 Vue の開発中に、取得された値が最新の値ではないという問題が発生することがあります。

たとえば、Vue コンポーネントに変数があり、その値が変更されたときに特定の操作を実行したいとします。

<template>
  <div>
    <p>{{ message }}</p>
    <button @click="changeMessage">更改</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: 'hello world'
    }
  },
  methods: {
    changeMessage() {
      this.message = 'hello Vue'
      console.log(this.message)
      this.doSomething() // doSomething方法需要使用最新的message值
    },
    doSomething() {
      console.log(this.message) // 这里输出的是旧的message值
    }
  }
}
</script>
ログイン後にコピー

上記のコードでは、「変更」ボタンをクリックしたときでは、message の値を変更し、最新のメッセージを出力します。ただし、doSomething メソッドを呼び出すと、出力メッセージの値が最新の値「hello Vue」ではなく、古い値「hello world」であることがわかります。 ######どうしてこれなの?

実際、Vue でのデータの更新は非同期です。変数の値を変更すると、Vue は更新にすぐに応答せず、まず更新をキューに追加し、次のイベント ループで DOM を更新します。したがって、 doSomething メソッドを呼び出すと、Vue は更新に応答する前に次のイベント ループを待ち続けます。

では、最新の値を取得するにはどうすればよいでしょうか?

Vue は、DOM が更新された後にコールバック関数を実行するための $nextTick メソッドを提供します。 doSomething メソッドを非同期的に記述し、$nextTick メソッドを通じて最新のメッセージ値を取得できます:

<template>
  <div>
    <p>{{ message }}</p>
    <button @click="changeMessage">更改</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: 'hello world'
    }
  },
  methods: {
    changeMessage() {
      this.message = 'hello Vue'
      console.log(this.message)
      this.$nextTick(() => {
        this.doSomething() // 等到DOM更新后再执行doSomething方法
      })
    },
    doSomething() {
      console.log(this.message) // 这里输出的是最新的message值"hello Vue"
    }
  }
}
</script>
ログイン後にコピー

上記のコードでは、doSomething メソッドを $nextTick でラップします。DOM が更新されると、$nextTick が呼び出します。最新のメッセージ値を取得できるようにメソッドを実行するコールバック関数。

概要:

Vue でのデータの更新は非同期です。最新の値を取得したい場合は、対応するメソッドを実行する前に、$nextTick メソッドを使用して DOM が更新されるのを待つ必要があります。方法。実際の開発では、古い値を取得しないように、適切なタイミングで $nextTick を使用する必要があります。

以上がvueで取得した値が最新ではありませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート