この記事では、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 サイトの他の関連記事を参照してください。

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

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

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

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

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

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

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

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


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

WebStorm Mac版
便利なJavaScript開発ツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
