Heim >Web-Frontend >View.js >So passen Sie Hooks in Vue3 an
Hinweis: Wenn Composition Api komplexe Funktionen hat, Bei Komponenten mit einer großen Menge Code arbeiten wir mit benutzerdefinierten Hooks zusammen, um den Code in Funktionsblöcke zu schreiben, und Variablen und Methoden werden gemeinsam definiert und aufgerufen. Beispielsweise integriert die A-Funktion reaktionsfähige Variablen und Methoden, und wir müssen nur Änderungen vornehmen A. Für die spätere Wartung muss der Code unter dem Funktionsmodul nicht gleichzeitig auf logisch verstreute Methoden und Daten achten, wie Vue2 in Option Api.
Das Schreiben benutzerdefinierter Hooks in Vue3 muss also beherrscht werden! Alles verkörpert die Idee der geringen Kopplung und hohen Kohäsion der Vue3 Composition Api! Nach dem Lesen der offiziellen Dokumente und Open-Source-Administratorvorlagen verwendet der Autor eine große Anzahl benutzerdefinierter Hooks!
Obwohl der Beamte nicht klar angibt oder definiert, was benutzerdefinierte Hooks sind, werden sie überall verwendet; Extrahieren Sie einige wiederverwendbare Methoden in Form von Funktionen und hängen Sie sie wie Haken auf, die jederzeit eingeführt und aufgerufen werden können, um das Ziel einer hohen Kohäsion und einer geringen Kopplung zu erreichen # Wiederverwendbare Funktionen in externe JS-Dateien extrahieren
#🎜 🎜 #
Dekonstruieren Sie beim Zitieren explizit die reaktionsfähigen Variablen oder Methoden, z. B.: const {nameRef, Fn} = useXX()import { ref, watch } from 'vue'; const useAdd= ({ num1, num2 }) =>{ const addNum = ref(0) watch([num1, num2], ([num1, num2]) => { addFn(num1, num2) }) const addFn = (num1, num2) => { addNum.value = num1 + num2 } return { addNum, addFn } } export default useAdd# 🎜🎜##🎜🎜 #Subtraction Function-Hook#🎜🎜 ## 🎜🎜 ## 🎜🎜##
//减法功能-Hook import { ref, watch } from 'vue'; export function useSub ({ num1, num2 }){ const subNum = ref(0) watch([num1, num2], ([num1, num2]) => { subFn(num1, num2) }) const subFn = (num1, num2) => { subNum.value = num1 - num2 } return { subNum, subFn } }#🎜🎜 ## 🎜🎜 ## 🎜🎜#Addition und Subtraktionsberechnungskomponente#🎜🎜 ## 🎜🎜 ## 🎜🎜#
<template> <div> num1:<input v-model.number="num1" /> <br /> num2:<input v-model.number="num2" /> </div> <span>加法等于:{{ addNum }}</span> <br /> <span>减法等于:{{ subNum }}</span> </template> <script setup> import { ref } from 'vue' import useAdd from './useAdd.js' //引入自动hook import { useSub } from './useSub.js' //引入自动hook const num1 = ref(2) const num2 = ref(1) //加法功能-自定义Hook(将响应式变量或者方法形式暴露出来) const { addNum, addFn } = useAdd({ num1, num2 }) addFn(num1.value, num2.value) //减法功能-自定义Hook (将响应式变量或者方法形式暴露出来) const { subNum, subFn } = useSub({ num1, num2 }) subFn(num1.value, num2.value) </script>#🎜 🎜#Die Beziehung zwischen benutzerdefinierten Vue3-Hooks und Mixin in der Vue2-Ära:
Vue3-benutzerdefinierte Hooks sein und bei der Referenzierung explizit reaktionsfähige Variablen oder Methoden offenlegen, wie zum Beispiel:
Mixins
export default { mixins: [ a, b, c, d, e, f, g ], //一个组件内可以混入各种功能的Mixin mounted() { console.log(this.name) //问题来了,这个name是来自于哪个mixin? } }
Unbekannte Mixin-Verwirrung, wir können einfach nicht wissen, aus welcher Mixin-Datei die Attribute stammen, was später zu Schwierigkeiten führt Wartung#🎜 🎜#
Vue3 Custom Hooks//加法功能-自定义Hook(将响应式变量或者方法形式暴露出来) const { addNum, addFn } = useAdd({ num1, num2 }) addFn(num1.value, num2.value) //减法功能-自定义Hook (将响应式变量或者方法形式暴露出来) const { subNum, subFn } = useSub({ num1, num2 }) subFn(num1.value, num2.value)Wir können die reaktiven Variablen und Methoden, die von jedem Hooks explizit bereitgestellt werden, leicht sehen2 Kann nicht an Mixin übermittelt werden Parameter übergeben, um die Logik zu ändernAber benutzerdefinierte Vue3-Hooks können: Benutzerdefinierte Vue3-Hooks können flexibel beliebige Parameter übergeben, um ihre Logik zu ändern. Die Parameter sind nicht auf andere Hooks beschränkt. Offengelegte Variablen Mixins
export default { mixins: [ addMixin, subMixin], //组件内混入加法和减法Mixin mounted(){ this.add(num1,num2) //调用addMixin内部的add方法 this.sub(num1,num2) //调用subMixin内部的sub方法 } }können Parameter durch den Aufruf interner Mixin-Methoden übergeben, können Parameter jedoch nicht direkt an Mixin übergeben, da Mixin nicht in Form einer Funktion verfügbar gemacht wird und dies auch der Fall ist nicht gesendet. Übergeben von Parametern
Fügen Sie einen durchschnittlichen Hook basierend auf dem obigen Beispiel hinzuVue3 benutzerdefinierter Hook
//平均功能-Hook import { ref, watch } from "vue"; export function useAverage(addNum) { const averageNum = ref(0); watch(addNum, (addNum) => { averageFn(addNum); }); const averageFn = (addNum) => { averageNum.value = addNum / 2; }; return { averageNum, averageFn, }; }Innerhalb der Komponente
//组件内 //加法功能-自定义Hook(将响应式变量或者方法形式暴露出来) const { addNum, addFn } = useAdd({ num1, num2 }) addFn(num1.value, num2.value)//主动调用,返回最新addNum //平均功能-自定义Hook- hook传入参数值来其他hook暴露出来的变量 const { averageNum, averageFn} = useAverage(addNum) averageFn(addNum.value)# 🎜🎜#Benutzerdefinierte Vue3-Hooks können beliebige Parameter flexibel übergeben, um ihre Logik zu ändern. Die Parameter sind nicht auf Variablen beschränkt, die von anderen Hooks bereitgestellt werden, was die Flexibilität von Vue3 in der abstrakten Logik verbessert.
3. Mixin-Variablen mit demselben Namen werden überschrieben
Der benutzerdefinierte Vue3-Hook kann Variablen mit demselben Namen umbenennen, wenn er eingeführt wird
export default { mixins: [ addMixin, subMixin], //组件内混入加法和减法Mixin mounted(){ this.add(num1,num2) //调用加法addMixin内部的add方法 this.sub(num1,num2) //调用减法subMixin内部的sub方法 } }
//加法功能-自定义Hook(将响应式变量或者方法形式暴露出来) const { totalNum:addNum, addFn } = useAdd({ num1, num2 }) addFn(num1.value, num2.value) //减法功能-自定义Hook (将响应式变量或者方法形式暴露出来) const { totalNum:subNum, subFn } = useSub({ num1, num2 }) subFn(num1.value, num2.value)In Vue3 Custom Hooks geben sowohl Additions- als auch Subtraktions-Hooks totalNum zurück, it ist einfach zu verwendende ES6-Objektdestrukturierung, um Variablen Variablen zuzuweisen. Umbenennen
Das obige ist der detaillierte Inhalt vonSo passen Sie Hooks in Vue3 an. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!