Inhaltsverzeichnis
Berechnete Attribute
Caching
缓存
getter 和 setter
侦听器
配置选项
其它写法
Getter und Setter
Konfigurationsoptionen
Andere Schreibmethoden
Heim Web-Frontend View.js So verwenden Sie berechnete Eigenschaften und Listener in Vue3

So verwenden Sie berechnete Eigenschaften und Listener in Vue3

May 13, 2023 pm 07:07 PM
vue3

Berechnete Attribute

Wir wissen, dass einige Daten in den Daten direkt über die Interpolationssyntax in der Vorlage angezeigt werden können. In einigen Fällen müssen wir jedoch möglicherweise einige Transformationen an den Daten durchführen, bevor wir sie anzeigen, oder mehrere Daten kombinieren. Anzeige

Die Verwendung von Ausdrücken in Vorlagen kann sehr praktisch sein, sie sind jedoch ursprünglich für einfache Vorgänge konzipiert. Wenn Sie zu viel Logik in die Vorlage einfügen, wird die Vorlage überlastet und schwer zu warten Es wird viel doppelten Code geben

Wir hoffen also, die Geschäftslogik und die UI-Schnittstelle zu trennen. Eine Möglichkeit besteht darin, die Logik in eine Methode zu extrahieren, aber dieser Ansatz hat die folgenden Nachteile: Der gesamte Datennutzungsprozess wird durchgeführt Werden Sie ein Methodenaufruf

  • Um Daten mehrmals zu erhalten, müssen Sie die Methode mehrmals aufrufen, um die entsprechende Logik ohne Zwischenspeicherung auszuführen

  • Tatsächlich gilt für jeden Antworttyp. Für komplexe Datenlogik Sie sollten berechnete Attribute verwenden

    <div id="app">
      <!-- 计算属性的使用和普通状态的使用方式是一致的 -->
      <h3>{{ fullname }}</h3>
    </div>
    
    <script>
      Vue.createApp({
        data() {
          return {
            firstname: &#39;Klaus&#39;,
            lastname: &#39;Wang&#39;
          }
        },
        computed: {
          fullname() {
            return this.firstname + &#39; &#39; + this.lastname
          }
        }
      }).mount(&#39;#app&#39;)
    Nach dem Login kopieren

    Caching

  • Berechnete Attribute werden basierend auf ihren Abhängigkeiten zwischengespeichert. Wenn sich die Daten nicht ändern, müssen berechnete Attribute nicht neu berechnet werden

Aber Wenn sich die abhängigen Daten ändern, wird die berechnete Eigenschaft bei Verwendung trotzdem neu berechnet对于任何包含响应式数据的复杂逻辑,你都应该使用计算属性

<div id="app">
  <!-- 计算属性的使用和普通状态的使用方式是一致的 -->
  <h3>{{ fullname }}</h3>
  <button @click="change">change</button>
</div>
<script>
  Vue.createApp({
    data() {
      return {
        firstname: &#39;Klaus&#39;,
        lastname: &#39;Wang&#39;
      }
    },
    methods: {
      change() {
        this.fullname = &#39;Alex Li&#39;
      }
    },
    computed: {
      // 计算属性的完整写法
      fullname: {
        get() {
          return this.firstname + &#39; &#39; + this.lastname
        },
        set(v) {
          this.firstname = v.split(&#39; &#39;)[0]
          this.lastname = v.split(&#39; &#39;)[1]
        }
      }
    }
  }).mount(&#39;#app&#39;)
</script>
Nach dem Login kopieren

缓存

计算属性会基于它们的依赖关系进行缓存,在数据不发生变化时,计算属性是不需要重新计算的

但是如果依赖的数据发生变化,在使用时,计算属性依然会重新进行计算

并且界面会使用最新的计算属性的值进行重新渲染

getter 和 setter

计算属性在大多数情况下,只需要一个getter方法即可,所以我们会将计算属性直接写成一个函数

Vue.createApp({
  data() {
    return {
      info: {
        name: &#39;Klaus&#39;
      }
    }
  },
  watch: {
    // 可以使用watch监听响应式数据的改变
    // 对应有两个参数
    // 参数一 --- 新值
    // 参数二 --- 旧值
    info(newV, oldV) {
      // 如果监听的值是对象,获取到的新值和旧值是对应对象的代理对象
      console.log(newV, oldV)

      // 代理对象 转 原生对象
      // 1. 使用浅拷贝获取一个新的对象,获取的新的对象为原生对象
      console.log({...newV})

      // 2. 使用Vue.toRaw方法获取原生对象
      console.log(Vue.toRaw(newV))
    }
  },
  methods: {
    change() {
      this.info = {
        name: &#39;Steven&#39;
      }
    }
  }
}).mount(&#39;#app&#39;)
Nach dem Login kopieren

侦听器

在data返回的对象中定义了数据,这个数据通过插值语法等方式绑定到template中,当数据变化时,template会自动进行更新来显示最新的数据

但是在某些情况下,我们希望在代码逻辑中监听某个数据的变化,这个时候就需要用侦听器watch来完成了

Vue.createApp({
  data() {
    return {
      info: {
        name: &#39;Klaus&#39;
      }
    }
  },
  watch: {
    info: {
      // 开启了深度监听后,当info的属性发生改变的时候,就会触发对应的watch回调
      // 注意: 和直接修改info引用不同的是,如果直接修改的是对象的属性
      // 那么此时newV和oldV是同一个对象的引用, 此时也就获取不到对应的旧值
      handler(newV, oldV) {
        console.log(newV, oldV)
        console.log(newV === oldV)  // => true
      },
      deep: true,
      immediate: true
    }
  },
  methods: {
    change() {
      this.info.name = &#39;Steven&#39;
    }
  }
}).mount(&#39;#app&#39;)
Nach dem Login kopieren

配置选项

属性说明
deep是否开启深度监听
值为boolean
未开启的时候,如果监听的是对象,那么只有对象的引用发生改变的时候,才会触发watch回调
开始后,如果监听的是对象,那么只要对象中的任意一个属性发生了改变,就会触发watch回调
immediate是否立即开始监听
默认情况下,初次渲染是不会触发watch监听,只有当值发生改变后,才会触发watch监听
将immediate设置为true后,初次渲染也会触发watch监听,此时oldValue的值为undefined
watch: {
  &#39;info.name&#39;(newV, oldV){
    console.log(newV, oldV)
  }
}
Nach dem Login kopieren

其它写法

直接监听对象属性

Vue.createApp({
  data() {
    return {
      info: {
        name: &#39;Klaus&#39;
      }
    }
  },
  watch: {
    // watch的值如果是一个字符串的时候
    // 会自动以该字符串作为函数名去methods中查找对应的方法
    &#39;info.name&#39;: &#39;watchHandler&#39;
  },
  methods: {
    change() {
      this.info.name = &#39;Steven&#39;
    },
    watchHandler(newV, oldV){
      console.log(newV, oldV)
    }
  }
}).mount(&#39;#app&#39;)
Nach dem Login kopieren

字符串写法

Vue.createApp({
  data() {
    return {
      info: {
        name: &#39;Klaus&#39;
      }
    }
  },
  watch: {
    &#39;info.name&#39;: [
      &#39;watchHandler&#39;,

      function handle() {
        console.log(&#39;handler2&#39;)
      },

      {
        handler() {
          console.log(&#39;handler3&#39;)
        }
      }
    ]
  },
  methods: {
    change() {
      this.info.name = &#39;Steven&#39;
    },
    watchHandler(){
      console.log(&#39;handler1&#39;)
    }
  }
}).mount(&#39;#app&#39;)
Nach dem Login kopieren

数组写法

Vue.createApp({
  data() {
    return {
      info: {
        name: &#39;Klaus&#39;
      }
    }
  },
  created() {
    /*
          $watch 参数列表
            参数一 --- 侦听源
            参数二 --- 侦听回调
            参数三 --- 配置对象
        */
    this.$watch(&#39;info.name&#39;, (newV, oldV) => console.log(newV, oldV), {
      immediate: true
    })
  },
  methods: {
    change() {
      this.info.name = &#39;Steven&#39;
    }
  }
}).mount(&#39;#app&#39;)
Nach dem Login kopieren

$watch

Und die Schnittstelle wird mit dem zuletzt berechneten Eigenschaftswert neu gerendert🎜

Getter und Setter

🎜 In den meisten Fällen eine berechnete Eigenschaft Erfordert nur eine Getter-Methode, daher schreiben wir die berechnete Eigenschaft direkt als Funktion🎜rrreee🎜Der Listener🎜🎜 definiert die Daten im von data zurückgegebenen Objekt. Diese Daten werden durch Interpolationssyntax usw. übergeben. Die Methode ist an die Vorlage gebunden . Wenn sich die Daten ändern, wird die Vorlage automatisch aktualisiert, um die neuesten Daten anzuzeigen. In einigen Fällen möchten wir jedoch die Änderung bestimmter Daten in der Codelogik überwachen abgeschlossen🎜rrreee

Konfigurationsoptionen

deep
Eigenschaften Beschreibung
Gibt an, ob die Tiefenüberwachung aktiviert werden soll
Der Wert ist boolesch
Wenn es nicht aktiviert ist und das Objekt überwacht wird, ändert sich nur die Referenz des Objekts Der Überwachungsrückruf wird ausgelöst. Wenn das Objekt nach dem Start überwacht wird, wird der Überwachungsrückruf sofort ausgelöst, solange sich ein Attribut im Objekt ändert.
Ob die Überwachung sofort gestartet werden soll
Standardmäßig wird die Überwachungsüberwachung beim ersten Rendern nicht ausgelöst. Nur wenn sich der Wert ändert, wird die Überwachungsüberwachung ausgelöst
Sofort festlegen true Anschließend löst das erste Rendering auch die Überwachung aus. Zu diesem Zeitpunkt ist der Wert von oldValue undefiniert
rrreee

Andere Schreibmethoden

🎜 Objekteigenschaften direkt überwachen🎜rrreee🎜String-Schreiben🎜rrreee🎜Array-Schreiben🎜rrreee🎜$watch🎜rrreee

Das obige ist der detaillierte Inhalt vonSo verwenden Sie berechnete Eigenschaften und Listener in Vue3. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So verwenden Sie tinymce im Vue3-Projekt So verwenden Sie tinymce im Vue3-Projekt May 19, 2023 pm 08:40 PM

tinymce ist ein voll funktionsfähiges Rich-Text-Editor-Plug-in, aber die Einführung von tinymce in Vue ist nicht so reibungslos wie bei anderen Vue-Rich-Text-Plug-ins. Tinymce selbst ist nicht für Vue geeignet, und @tinymce/tinymce-vue muss eingeführt werden. und Es handelt sich um ein ausländisches Rich-Text-Plug-in, das die chinesische Version nicht bestanden hat. Sie müssen das Übersetzungspaket von der offiziellen Website herunterladen (möglicherweise müssen Sie die Firewall umgehen). 1. Installieren Sie die zugehörigen Abhängigkeiten npminstalltinymce-Snpminstall@tinymce/tinymce-vue-S2. 3. Führen Sie den Skin und das chinesische Paket ein. Erstellen Sie einen neuen Tinymce-Ordner im öffentlichen Ordner des Projekts und laden Sie ihn herunter

vue3+vite: So beheben Sie den Fehler bei der Verwendung von require zum dynamischen Importieren von Bildern in src vue3+vite: So beheben Sie den Fehler bei der Verwendung von require zum dynamischen Importieren von Bildern in src May 21, 2023 pm 03:16 PM

vue3+vite:src verwendet „require“, um Bilder dynamisch zu importieren, und vue3+vite importiert dynamisch mehrere Bilder. Wenn Sie „requireisnotdefined“ verwenden, wird eine Fehlermeldung angezeigt like vue2 like imgUrl:require(' .../assets/test.png') wird importiert, da Typescript Require nicht unterstützt, daher wird Import verwendet. So lösen Sie das Problem: Verwenden Sieawaitimport

So aktualisieren Sie einen Teilinhalt der Seite in Vue3 So aktualisieren Sie einen Teilinhalt der Seite in Vue3 May 26, 2023 pm 05:31 PM

Um eine teilweise Aktualisierung der Seite zu erreichen, müssen wir nur das erneute Rendern der lokalen Komponente (dom) implementieren. In Vue lässt sich dieser Effekt am einfachsten mit der v-if-Direktive erzielen. In Vue2 können wir zusätzlich zur Verwendung der v-if-Anweisung zum erneuten Rendern des lokalen Doms auch eine neue leere Komponente erstellen. Wenn wir die lokale Seite aktualisieren müssen, springen wir zu dieser leeren Komponentenseite und springen dann wieder hinein der beforeRouteEnter-Schutz in der leeren Komponente. Wie in der Abbildung unten gezeigt, wie man in Vue3.X auf die Schaltfläche „Aktualisieren“ klickt, um das DOM im roten Feld neu zu laden und den entsprechenden Ladestatus anzuzeigen. Da der Guard in der Komponente in der scriptsetup-Syntax in Vue3.X nur o hat

Wie Vue3 Markdown analysiert und Code-Hervorhebung implementiert Wie Vue3 Markdown analysiert und Code-Hervorhebung implementiert May 20, 2023 pm 04:16 PM

Um das Blog-Frontend mit Vue zu implementieren, müssen Sie die Markdown-Analyse implementieren. Wenn Code vorhanden ist, müssen Sie die Code-Hervorhebung implementieren. Es gibt viele Markdown-Parsing-Bibliotheken für Vue, wie z. B. markdown-it, vue-markdown-loader, markiert, vue-markdown usw. Diese Bibliotheken sind alle sehr ähnlich. Hier wird Markiert verwendet, und highlights.js wird als Code-Hervorhebungsbibliothek verwendet. Die spezifischen Implementierungsschritte lauten wie folgt: 1. Installieren Sie abhängige Bibliotheken. Öffnen Sie das Befehlsfenster unter dem Vue-Projekt und geben Sie den folgenden Befehl ein: npminstallmarked-save//marked, um Markdown in htmlnpmins zu konvertieren

So verwenden Sie vue3+ts+axios+pinia, um eine sinnlose Aktualisierung zu erreichen So verwenden Sie vue3+ts+axios+pinia, um eine sinnlose Aktualisierung zu erreichen May 25, 2023 pm 03:37 PM

vue3+ts+axios+pinia realisiert sinnlose Aktualisierung 1. Laden Sie zuerst aiXos und pinianpmipinia im Projekt herunter--savenpminstallaxios--save2. AxiosResponse}from"axios";importaxiosfrom'axios';import{ElMess

So wählen Sie einen Avatar aus und schneiden ihn in Vue3 zu So wählen Sie einen Avatar aus und schneiden ihn in Vue3 zu May 29, 2023 am 10:22 AM

Der letzte Effekt besteht darin, die VueCropper-Komponente „garnaddvue-cropper@next“ zu installieren. Wenn es sich um Vue3 handelt oder Sie andere Methoden als Referenz verwenden möchten, besuchen Sie bitte die offizielle npm-Adresse. Es ist auch sehr einfach, es in einer Komponente zu referenzieren und zu verwenden. Sie müssen nur die entsprechende Komponente und ihre Stildatei einführen. Ich verweise hier nicht global, sondern nur auf import{userInfoByRequest}from'../js/api ' in meiner Komponentendatei. import{VueCropper}from'vue-cropper&

So verwenden Sie wiederverwendbare Vue3-Komponenten So verwenden Sie wiederverwendbare Vue3-Komponenten May 20, 2023 pm 07:25 PM

Vorwort Ob Vue oder React: Wenn wir auf mehrere wiederholte Codes stoßen, werden wir darüber nachdenken, wie wir diese Codes wiederverwenden können, anstatt eine Datei mit einer Reihe redundanter Codes zu füllen. Tatsächlich können sowohl Vue als auch React eine Wiederverwendung durch Extrahieren von Komponenten erreichen. Wenn Sie jedoch auf einige kleine Codefragmente stoßen und keine andere Datei extrahieren möchten, kann React im Vergleich dazu verwendet werden Deklarieren Sie das entsprechende Widget in der Datei , oder implementieren Sie es über die Renderfunktion, wie zum Beispiel: constDemo:FC=({msg})=>{returndemomsgis{msg}}constApp:FC=()=>{return(

So lösen Sie das Problem, dass die Zugriffsseite leer angezeigt wird, nachdem das vue3-Projekt gepackt und auf dem Server veröffentlicht wurde So lösen Sie das Problem, dass die Zugriffsseite leer angezeigt wird, nachdem das vue3-Projekt gepackt und auf dem Server veröffentlicht wurde May 17, 2023 am 08:19 AM

Nachdem das vue3-Projekt gepackt und auf dem Server veröffentlicht wurde, wird auf der Zugriffsseite eine leere 1 angezeigt. Der publicPath in der Datei vue.config.js wird wie folgt verarbeitet: const{defineConfig}=require('@vue/cli-service') module.exports=defineConfig({publicPath :process.env.NODE_ENV==='produktion'?'./':'/&

See all articles