検索
ホームページウェブフロントエンドVue.js1 つの記事で Vue3 の watchEffect について学び、その応用シナリオについて話します。

この記事では、Vue3 の watchEffect を理解し、その副作用を紹介し、何ができるかについて説明します。皆様のお役に立てれば幸いです。

1 つの記事で Vue3 の watchEffect について学び、その応用シナリオについて話します。

watchEffect は、渡された関数を即座に実行しながら、依存関係を事後的に追跡し、依存関係が変更されたときに関数を再実行します。 (学習ビデオ共有: vue ビデオ チュートリアル)

言い換えると、watchEffect は、依存関係ソースと watch のコールバック関数をマージすることと同じです。 , このコールバック関数は、リアクティブな依存関係のいずれかが更新されると再実行されます。 watch とは異なり、watchEffect のコールバック関数はすぐに実行されます (つまり、{immediate: true })

この記事では、主にその方法について説明します。 副作用を明確にするコードをよりエレガントにする~

watchEffect の副作用

副作用とは (副作用##) #), 簡単に言うと、副作用とは、外部変数データや変数の変更、外部インターフェイスの呼び出しなど、特定の操作を実行することです。 watchEffect のコールバック関数は副作用関数です。依存関係の変更をリッスンした後で watchEffect を使用して特定の操作を実行するためです。

副作用関数が実行されると、必然的にシステムに何らかの影響が生じます。たとえば、タイマー

setInterval が副作用関数内で実行されるため、副作用。 Vue3watchEffect副作用をリッスンする関数は、クリーンアップが失敗したときにコールバックを登録する入力パラメーターとして onInvalidate 関数を受け取ることができます。この無効化コールバックは、次の状況が発生したときにトリガーされます。

    副作用が再実行されようとしている (つまり、依存関係の値が変更される)
  • リスナー停止しています (明示的な呼び出しによって返されます。値がリスニングを停止するか、コンポーネントがアンインストールされ、リスニング停止が暗黙的に呼び出されます)
  • import { watchEffect, ref } from 'vue'
    
    const count = ref(0)
    watchEffect((onInvalidate) => {
      console.log(count.value)
      onInvalidate(() => {
        console.log('执行了onInvalidate')
      })
    })
    
    setTimeout(()=> {
      count.value++
    }, 1000)
上記のコードが出力される順序は次のとおりです:

0 -> Executed onInvalidate、最後に実行 -> 1

分析: 初期化中に、

count の値最初に 0 が出力され、その後タイマーにより count の値を 1 に更新します。このとき、副作用が再度実行されるため、 onInvalidate のコールバック関数がトリガーされ、executed onInvalidate# が出力されます。##、その後、副作用関数が実行され、 の値 1 が出力されます。カウント###。

import { watchEffect, ref } from 'vue'

const count = ref(0)
const stop = watchEffect((onInvalidate) => {
  console.log(count.value)
  onInvalidate(() => {
    console.log('执行了onInvalidate')
  })
})

setTimeout(()=> {
  stop()
}, 1000)
上記のコード: stop

関数を表示してリスニングを停止すると、

onInvalidate コールバック関数もトリガーされます。同様に、watchEffect が配置されているコンポーネント が暗黙的に stop 関数を呼び出してリスニングを停止するため、onInvalidate のコールバックも同様に実行できます。トリガーされる機能。 watchEffect アプリケーション

watchEffect

の非遅延実行と、渡された

onInvalidate 関数を使用して、次のことができます。どうしたの? シナリオ 1

: 通常、タイマーを定義するかイベントをリッスンしますが、それを

mounted ライフサイクル フック関数で定義または登録する必要があります。コンポーネントが破棄される 以前は、タイマーがクリアされるか、リスニング関数が beforeUnmount フック関数でクリアされました。このように、ロジックは 2 つのライフサイクルに分散されており、メンテナンスや読み取りには適していません。 watchEffect

を使用すると、作成ロジックと破棄ロジックがまとめられ、コードがよりエレガントで読みやすくなります~

// 定时器注册和销毁
watchEffect((onInvalidate) => {
  const timer = setInterval(()=> {
    // ...
  }, 1000)
  onInvalidate(() => clearInterval(timer))
})

const handleClick = () => {
 // ...
}
// dom的监听和取消监听
onMounted(()=>{
  watchEffect((onInvalidate) => {
    document.querySelector('.btn').addEventListener('click', handleClick, false)
    onInvalidate(() => document.querySelector('.btn').removeEventListener('click', handleClick))
  })
})
シナリオ 2

: watchEffect を使用して手ぶれ補正スロットルを実行します (リクエストのキャンセルなど)

const id = ref(13)
watchEffect(onInvalidate => {
   // 异步请求
  const token = performAsyncOperation(id.value)
  // 如果id频繁改变,会触发失效函数,取消之前的接口请求
  onInvalidate(() => {
    // id has changed or watcher is stopped.
    // invalidate previously pending async operation
    token.cancel()
  })
})
....

もちろん

watchEffect

も実行できます修正を開くなど、さまざまな操作が可能です。

modal ポップアップ ウィンドウで、id の変更が検出された場合、onInvalidate## で初期パラメータをリセットできます。 # function... これは単なる紹介です。皆さんがもっと発見できることを願っています~ (学習ビデオ共有: Web フロントエンド開発

基本プログラミング ビデオ

)

以上が1 つの記事で Vue3 の watchEffect について学び、その応用シナリオについて話します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は掘金社区で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
フロントエンドのvue.js:実際のアプリケーションと例フロントエンドのvue.js:実際のアプリケーションと例Apr 11, 2025 am 12:12 AM

Vue.jsは、複雑なユーザーインターフェイスを構築するのに適した進歩的なJavaScriptフレームワークです。 1)そのコア概念には、レスポンシブデータ、コンポーネント、仮想DOMが含まれます。 2)実際のアプリケーションでは、TODOアプリケーションを構築し、Vuerouterを統合することで実証できます。 3)デバッグするときは、vuedevtools and Console.logを使用することをお勧めします。 4)パフォーマンスの最適化は、V-IF/V-Show、リストレンダリング最適化、コンポーネントの非同期負荷などを通じて達成できます。

Vue.jsとReact:重要な違​​いを理解するVue.jsとReact:重要な違​​いを理解するApr 10, 2025 am 09:26 AM

Vue.JSは中小企業から中規模のプロジェクトに適していますが、Reactは大規模で複雑なアプリケーションにより適しています。 1。VUE.JSのレスポンシブシステムは、依存関係追跡を介してDOMを自動的に更新し、データの変更を簡単に管理できるようにします。 2.反応は一方向のデータフローを採​​用し、データは親コンポーネントから子コンポーネントに流れ、明確なデータフローと簡単な抽出構造を提供します。

Vue.js vs. React:プロジェクト固有の考慮事項Vue.js vs. React:プロジェクト固有の考慮事項Apr 09, 2025 am 12:01 AM

VUE.JSは、中小規模のプロジェクトや迅速な反復に適していますが、Reactは大規模で複雑なアプリケーションに適しています。 1)Vue.jsは使いやすく、チームが不十分な状況やプロジェクトスケールが小さい状況に適しています。 2)Reactにはより豊富なエコシステムがあり、高性能で複雑な機能的ニーズを持つプロジェクトに適しています。

Vueにタグをジャンプする方法Vueにタグをジャンプする方法Apr 08, 2025 am 09:24 AM

VUEでタグのジャンプを実装する方法には、HTMLテンプレートでAタグを使用してHREF属性を指定する方法が含まれます。 VUEルーティングのルーターリンクコンポーネントを使用します。 JavaScriptでこれを使用します。$ router.push()メソッド。パラメーターはクエリパラメーターに渡すことができ、ルートは動的ジャンプのルーターオプションで構成されています。

VUEのコンポーネントジャンプを実装する方法VUEのコンポーネントジャンプを実装する方法Apr 08, 2025 am 09:21 AM

VUEでコンポーネントジャンプを実装するための次の方法があります。Router-Linkと< router-view>を使用してください。ハイパーリンクジャンプを実行し、ターゲットパスとして属性を指定するコンポーネント。 < router-view>を使用してください現在ルーティングされているレンダリングされているコンポーネントを表示するコンポーネント。プログラマティックナビゲーションには、router.push()およびrouter.replace()メソッドを使用します。前者は歴史を保存し、後者は記録を残さずに現在のルートに取って代わります。

VueのDivにジャンプする方法VueのDivにジャンプする方法Apr 08, 2025 am 09:18 AM

VUEにDIV要素をジャンプするには、VUEルーターを使用してルーターリンクコンポーネントを追加するには、2つの方法があります。 @clickイベントリスナーを追加して、これを呼び出します。$ router.push()メソッドをジャンプします。

ジャンプVUEによって価値を転送する方法ジャンプVUEによって価値を転送する方法Apr 08, 2025 am 09:15 AM

VUEにデータを渡す主な方法は2つあります。PROPS:一方向データバインディング、親コンポーネントから子コンポーネントにデータを渡します。イベント:イベントとカスタムイベントを使用してコンポーネント間でデータを渡します。

VUEの導入方法にジャンプする方法VUEの導入方法にジャンプする方法Apr 08, 2025 am 09:12 AM

Vue.jsは、ジャンプする3つの方法を提供します。ネイティブJavaScript API:Window.Location.hrefを使用してジャンプします。 Vueルーター:< router-link>を使用してくださいタグまたはこれ。$ router.push()ジャンプする方法。 Vuex:トリガールートジャンプを発送するか、突然変異をコミットします。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター