目次
1. computed
2. watch
書き方vu2
当前求和为:{{ sum }}
Vue3 は次のように記述します
信息为:{{ msg }}
姓名:{{ person.name }}
年龄:{{ person.age }}
薪资:{{ person.job.j1.salary }}K
は、
ホームページ ウェブフロントエンド Vue.js Vue3でcomputed、watch、watchEffectを使用する方法

Vue3でcomputed、watch、watchEffectを使用する方法

May 12, 2023 pm 08:04 PM
vue3 computed watch

1. computed

<template>
  姓:<input v-model="person.firstName"><br/><br/>
  名:<input  v-model="person.lastName"><br/><br/>
  <span>全名:{{person.fullname}}</span><br/><br/>
  <span>全名:<input v-model="person.fullname"></span>
</template>

<script>
import {reactive,computed} from &#39;vue&#39;
export default {
  name: &#39;HelloWorld&#39;,
  setup(){
    let person = reactive({
      firstName:"张",
      lastName:"三"
    })
    //computed简写形式,没考虑修改
    /*person.fullname = computed(()=>{
      return person.firstName+"-"+person.lastName;
    })*/
    person.fullname = computed({
      get(){
        return person.firstName+"-"+person.lastName;
      },
      set(value){
        const nameArr = value.split(&#39;-&#39;);
        person.firstName = nameArr[0];
        person.lastName = nameArr[1];
      }
    })
    return{
      person,
    }
  }
}
</script>
ログイン後にコピー

2. watch

  • 1. Vue2.xx

  • の監視設定関数と一致しています。

    2. 2 つの小さな「落とし穴」:

    • reactive で定義されたレスポンシブ データを監視する場合: oldValue が正しく取得できず、ディープ モニタリングが強制的に開かれます (ディープ設定が失敗する)

    • reactive で定義されたリアクティブ データの属性を監視する場合: 深い設定が有効です

書き方vu2

<template>
  <h3 id="当前求和为-nbsp-sum-nbsp">当前求和为:{{ sum }}</h3>
  <button @click="sum++">点我sum++</button>
</template>

<script>
import {ref} from &#39;vue&#39;

export default {
  name: &#39;Demo&#39;,
  watch: {
    /*sum(oldValue,newValue){
      console.log("sum发生了变化",oldValue,newValue);
    }*/
    sum: {
      immediate: true,
      deep:true,
      handler(newValue,oldValue) {
        console.log("sum发生了变化", newValue, oldValue);
      }
    }
  },
  setup() {
    let sum = ref(0);

    return {
      sum,
    }
  }
}
</script>
ログイン後にコピー

Vue3 は次のように記述します

1. 状況 1: ref

<template>
  <h3 id="当前求和为-nbsp-sum-nbsp">当前求和为:{{ sum }}</h3>
  <button @click="sum++">点我sum++</button>>
</template>
<script>
import {ref, watch} from &#39;vue&#39;
export default {
  name: &#39;Demo&#39;,
  setup() {
    let sum = ref(0);
    let msg = ref("你好啊");
    //情况一:监视ref所定义的一个响应式数据
    watch(sum, (newValue, oldValue) => {
      console.log("sum发生了变化", newValue, oldValue);
    })

    return {
      sum
    }
  }
}
</script>
ログイン後にコピー

Vue3でcomputed、watch、watchEffectを使用する方法## で定義された応答データを監視します

# #watch は、即時設定やその他の設定を含む設定項目を渡すこともできます:

watch(sum, (newValue, oldValue) => {
      console.log("sum发生了变化", newValue, oldValue);
    },{immediate:true})
ログイン後にコピー

2. 状況 2: 複数の情報を同時に監視する必要がある場合

<template>
  <h3 id="当前求和为-nbsp-sum-nbsp">当前求和为:{{ sum }}</h3>
  <button @click="sum++">点我sum++</button>
  <hr/>
  <h3 id="信息为-nbsp-msg-nbsp">信息为:{{ msg }}</h3>
  <button @click="msg+=&#39;!&#39;">点我sum++</button>
</template>
<script>
import {ref, watch} from &#39;vue&#39;
export default {
  name: &#39;Demo&#39;,
  setup() {
    let sum = ref(0);
    let msg = ref("你好啊");

    //情况二:监视ref所定义的多个响应式数据
    watch([sum,msg],(newValue, oldValue) => {
      console.log("sum发生了变化", newValue, oldValue);
    })

    return {
      sum,
      msg
    }
  }
}
</script>
ログイン後にコピー

3. ケース 3: reactive

<template>
  <h3 id="姓名-nbsp-person-name-nbsp">姓名:{{ person.name }}</h3>
  <h3 id="年龄-nbsp-person-age-nbsp">年龄:{{ person.age }}</h3>
  <h3 id="薪资-nbsp-person-job-j-salary-nbsp-K">薪资:{{ person.job.j1.salary }}K</h3>
  <button @click="person.name+=&#39;~&#39;">修改姓名</button>
  <button @click="person.age++">修改年龄</button>
  <button @click="person.job.j1.salary++">涨薪</button>
</template>
<script>
import {reactive, watch} from &#39;vue&#39;

export default {
  name: &#39;Demo&#39;,
  setup() {
    let person = reactive({
      name: "张三",
      age: 18,
      job:{
        j1:{
          salary:20
        }
      }
    })
    //情况三:监视reactive所定义的一个响应式数据全部属性
    // 1\注意:无法正确获取oldvalue
    // 2\注意:强制开启了深度监视(deep配置无效)
    watch(person, (newValue, oldValue) => {
      console.log("person发生了变化", newValue, oldValue);
    })

    return {
      person
    }
  }
}
</script>
ログイン後にコピー

4. ケース 4: 定義されたレスポンシブ データの特定の属性を監視するシナリオ 5: reactive

//情况四:监视reactive所定义的一个响应式数据某个属性
    watch(()=>person.name, (newValue, oldValue) => {
      console.log("person的name发生了变化", newValue, oldValue);
    })
ログイン後にコピー
# によって定義されたレスポンシブ データの一部の属性を監視する

Vue3でcomputed、watch、watchEffectを使用する方法##6. 特殊な状況では、オブジェクト内のオブジェクト属性を監視するには、 deep:true

//情况五:监视reactive所定义的一个响应式数据某个属性
    watch([()=>person.name,()=>person.age], (newValue, oldValue) => {
      console.log("person的name或age发生了变化", newValue, oldValue);
    })
ログイン後にコピー
7 を開始します。次で定義されたオブジェクトを監視します。 ref 応答データには .value または deep:true

watch(()=>person.job, (newValue, oldValue) => {
	console.log("person的job发生了变化", newValue, oldValue);
},{deep:true})//由于监视的是reactive对象中的某个属性,deep奏效
ログイン後にコピー
Vue3でcomputed、watch、watchEffectを使用する方法 が必要です。 3. watchEffect

watch のルーチンは次のとおりです。監視対象の属性と次のルーチンの両方を指定します。監視コールバック

#watchEffect は次のとおりです。監視するプロパティ、監視コールバックで使用されるプロパティ、およびどのプロパティを監視するかを指定する必要はありません

# #watchEffect

は、

computed

: に似ています。ただし、

computed

は計算値 (コールバック関数の戻り値) に注目するため、戻り値 を記述する必要があります。また、

watchEffect

は処理 (コールバック関数の関数本体) に注目するため、戻り値を記述する必要はありません <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'> let person = ref({ name: &quot;张三&quot;, age: 18, job:{ j1:{ salary:20 } } }) watch(person.value, (newValue, oldValue) =&gt; { console.log(&quot;person的value发生了变化&quot;, newValue, oldValue); }) 或 watch(person, (newValue, oldValue) =&gt; { console.log(&quot;person的value发生了变化&quot;, newValue, oldValue); },{deep:true})</pre><div class="contentsignin">ログイン後にコピー</div></div>たとえば、上記を使用します。例:

//watchEffect所指定的回调中用到的数据只要发生变化,则直接重新执行回调
watchEffect(()=>{
	const xl = sum.value
	const x2 = person.age
	console.log( "watchEffect配置的回调执行了")
})
ログイン後にコピー

最後に、watch と watchEffect を使用して、example

import {reactive,watchEffect} from &#39;vue&#39;
export default {
  name: &#39;Demo&#39;,
  setup() {
    let person = reactive({
      name: "张三",
      age: 18,
      job:{
        j1:{
          salary:20
        }
      }
    })
    watchEffect(()=>{
      const x1 = person.name;
      console.log("watchEffect所指定的回调执行了"+x1);
    })
    return {
      person
    }
  }
}
</script>
ログイン後にコピー
という名前を実装します。

以上がVue3でcomputed、watch、watchEffectを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ユーザーがまれに発生する不具合: Samsung Watch スマートウォッチで突然白い画面の問題が発生する ユーザーがまれに発生する不具合: Samsung Watch スマートウォッチで突然白い画面の問題が発生する Apr 03, 2024 am 08:13 AM

スマートフォンの画面に緑色の線が表示されるというトラブルに遭遇したことがある方もいると思いますし、見たことはなくても、関連する写真をインターネット上で見たことがあるはずです。では、スマートウォッチの画面が白くなってしまう状況に遭遇したことはありますか? CNMOは4月2日、海外メディアから、Redditユーザーがサムスンウォッチシリーズのスマートウォッチの画面が白くなっている写真をソーシャルプラットフォームで共有したことを知った。ユーザーは、「出発時に充電していましたが、戻ってきたらこのようになっていました。再起動しようとしましたが、再起動プロセス中も画面はまだこのままでした。」Samsung Watch スマートウォッチの画面が白くなりました。 Reddit ユーザーはスマート ウォッチを指定していません。特定のモデルです。しかし、写真から判断すると、Samsung Watch5のはずです。以前、別のRedditユーザーも報告しました

vue3+vite: src に画像を動的にインポートするために require を使用するときのエラーを解決する方法 vue3+vite: src に画像を動的にインポートするために require を使用するときのエラーを解決する方法 May 21, 2023 pm 03:16 PM

vue3+vite:src は、イメージとエラー レポートと解決策を動的にインポートするために require を使用します。vue3+vite は複数のイメージを動的にインポートします。vue3。TypeScript 開発を使用している場合、イメージを導入するために require のエラー メッセージが表示されます。requireisnotdefined は使用できません。 vue2 のような imgUrl:require(' .../assets/test.png') は、typescript が require をサポートしていないため、インポートされます。そのため、import が使用されます。解決方法は次のとおりです: awaitimport を使用します

Vue3 でページの部分的なコンテンツを更新する方法 Vue3 でページの部分的なコンテンツを更新する方法 May 26, 2023 pm 05:31 PM

ページの部分的な更新を実現するには、ローカル コンポーネント (dom) の再レンダリングを実装するだけで済みます。 Vue でこの効果を実現する最も簡単な方法は、v-if ディレクティブを使用することです。 Vue2 では、v-if 命令を使用してローカル dom を再レンダリングすることに加えて、新しい空のコンポーネントを作成することもできます。ローカル ページを更新する必要がある場合は、この空のコンポーネント ページにジャンプしてから、再びジャンプします。 beforeRouteEnter ガードを空白のコンポーネントに配置します。元のページ。以下の図に示すように、Vue3.X の更新ボタンをクリックして赤枠内の DOM を再読み込みし、対応する読み込みステータスを表示する方法を示します。 Vue3.X の scriptsetup 構文のコンポーネントのガードには o しかないので、

Vue3 でアバターを選択してトリミングする方法 Vue3 でアバターを選択してトリミングする方法 May 29, 2023 am 10:22 AM

最終的な効果は、VueCropper コンポーネントのyarnaddvue-cropper@next をインストールすることです。上記のインストール値は Vue3 用です。Vue2 の場合、または他の方法を参照したい場合は、公式 npm アドレス: 公式チュートリアルにアクセスしてください。また、コンポーネント内で参照して使用するのも非常に簡単です。必要なのは、対応するコンポーネントとそのスタイル ファイルを導入することだけです。ここではグローバルに参照しませんが、import{userInfoByRequest}from'../js/api を導入するだけです。 ' コンポーネント ファイルにインポートします。import{VueCropper}from'vue-cropper&

vue3+ts+axios+pinia を使用して無意味なリフレッシュを実現する方法 vue3+ts+axios+pinia を使用して無意味なリフレッシュを実現する方法 May 25, 2023 pm 03:37 PM

vue3+ts+axios+pinia で無意味なリフレッシュを実現 1. まず、プロジェクト内の aiXos と pinianpmipinia をダウンロードします--savenpminstallaxios--save2. axios リクエストをカプセル化-----ダウンロード js-cookienpmiJS-cookie-s// aixosimporttype{AxiosRequestConfig , AxiosResponse}from"axios";importaxiosfrom'axios';import{ElMess

DefineCustomElement を使用して Vue3 でコンポーネントを定義する方法 DefineCustomElement を使用して Vue3 でコンポーネントを定義する方法 May 28, 2023 am 11:29 AM

Vue を使用してカスタム要素を構築する WebComponents は、開発者が再利用可能なカスタム要素 (カスタム要素) を作成できるようにする一連の Web ネイティブ API の総称です。カスタム要素の主な利点は、フレームワークがなくても、任意のフレームワークで使用できることです。これらは、異なるフロントエンド テクノロジ スタックを使用している可能性のあるエンド ユーザーをターゲットにする場合、または最終アプリケーションを使用するコンポーネントの実装の詳細から切り離したい場合に最適です。 Vue と WebComponents は補完的なテクノロジであり、Vue はカスタム要素の使用と作成に対する優れたサポートを提供します。カスタム要素を既存の Vue アプリケーションに統合したり、Vue を使用してビルドしたりできます。

Axios リクエストを vue3 でカプセル化してコンポーネントで使用する方法は何ですか? Axios リクエストを vue3 でカプセル化してコンポーネントで使用する方法は何ですか? May 21, 2023 am 10:49 AM

1. カプセル化された js を保存するフォルダーを作成します。私は src/request/axios.js に作成しました。 2. カプセル化コードは次のとおりです。次のコードを request.js に直接コピーして、get リクエストと post リクエストをカプセル化します。自分で設定する必要があるのは、リクエスト アドレスを変更し、tokenKey がトークンかどうかを変更し、保存したローカル トークン名に変更することです。コード内のコメントを読むことができ、理解しやすいです。 /**axios カプセル化*リクエストのインターセプト、対応するインターセプト、およびエラーの統合処理*/importaxiosfrom'axios';importQSfrom'qs&#39

Vue3 と Element Plus を使用して自動インポートを実装する方法 Vue3 と Element Plus を使用して自動インポートを実装する方法 May 22, 2023 pm 04:58 PM

1 はじめに 1.1 目的 ElementPlus は、パッケージ化されたファイルのサイズを大幅に削減するためにオンデマンド導入を使用します 1.2 最終効果は、components.d.ts ファイルを自動的に生成し、ファイルに導入します ElementPlus コンポーネントは、components.d を自動的に生成します。 ElementPlusAPI2 準備 ElementPlus をインストール#好きなパッケージ マネージャーを選択#NPM$npminstallelement-plus--save#Yarn$yarnaddelement-plus#pnpm$pnpminstallelement-plus3 を押します

See all articles