Maison > interface Web > Voir.js > le corps du texte

Présentation de l'API Composition et de son utilisation principale dans Vue3

藏色散人
Libérer: 2021-12-10 15:04:56
avant
2484 Les gens l'ont consulté

Utilisation principale de l'API Composition dans Vue3

Qu'est-ce que l'API Composition ?

L'API Composition est également appelée API combinée, qui est une nouvelle fonctionnalité dans Vue3.x. En créant des composants Vue, nous pouvons extraire les parties répétables de l'interface en segments de code réutilisables. Avant l'API de composition, le code métier lié à Vue devait être configuré pour une zone spécifique de l'option. grand projet, cela posera des problèmes plus tard. La maintenance est relativement compliquée et la réutilisabilité du code n'est pas élevée. L'API de composition de Vue3 résout ce problème.

Utilisez ref et reactive pour définir des données réactives dans la configuration

Avant d'utiliser ref et reactive pour définir des données, vous devez les déconstruire de vue.

import {ref,reactive} from 'vue';
Copier après la connexion

Ref et reactive peuvent définir des données réactives. Les données définies peuvent être obtenues directement dans le modèle Vue. Cependant, si elles sont obtenues via des méthodes, il existe certaines différences dans l'acquisition des données définies par ref et reactive. défini par ref doit être obtenu via L'attribut value est obtenu indirectement et les données définies par reactive peuvent être obtenues directement. Il en va de même lors de la modification de ces deux types de données.

export default {
  setup() {
    // 使用ref定义响应式数据
    const title = ref("这是一个标题");
    // 使用reactive定义响应式数据
    const userinfo = reactive({
      username: "张三",
      age: 20
    });
    // 获取reactive中的属性可以直接获取
    const getUserName = () => {
      alert(userinfo.username)
    };
    // 获取ref中的数据需要通过value属性
    const getTitle = () => {
      alert(title.value)
    };
    const setUserName = () => {
      // 修改reactive中的属性可以直接修改
      userinfo.username = "修改后的张三"
    };
    const setTitle = () => {
      // 修改ref中的属性,需要通过value
      title.value = "这是修改后的标题"
    };
    return {
      title,
      userinfo,
      getUserName,
      getTitle,
      setTitle,
      setUserName
    }
  },
  data() {
    return {
      msg: "这是Home组件的msg"
    }
  },
  methods: {
    run() {
      alert('这是Home组件的run方法')
    }
  }
}
Copier après la connexion

Vous pouvez utiliser v-model pour effectuer directement une liaison de données bidirectionnelle.

<input type="text" v-model="title">
<input type="text" v-model="userinfo.username">
Copier après la connexion

toRefs déconstruit les données d'objets réactifs

La raison pour laquelle toRefs est nécessaire est que les données déconstruites via toRefs ont également des caractéristiques réactives. La déconstruction via l'opérateur de propagation traditionnel n'a pas de caractéristiques réactives. .

Déconstruisez toRefs de vue

import {ref,reactive,toRefs} from &#39;vue&#39;;
Copier après la connexion

setup et apportez les modifications suivantes aux données de retour

return {
  title,
  userinfo,
  getUserName,
  getTitle,
  setTitle,
  setUserName,
  ...toRefs(article)
}
Copier après la connexion

Propriétés calculées dans la configuration

Les propriétés calculées dans la configuration sont similaires aux propriétés calculées générales, la différence est qu'elles ne peuvent pas être lues ceci .

setup() {
    let userinfo = reactive({
      firstName: "",
      lastName: ""
    });
    let fullName = computed(() => {
      return userinfo.firstName + " " + userinfo.lastName
    })
    return {
      ...toRefs(userinfo),
      fullName
    }
  }
Copier après la connexion

readonly : un proxy profond en lecture seule

readonly existe pour pouvoir convertir des objets réactifs en objets primitifs ordinaires.

Présentation de la lecture seule.

import {computed, reactive,toRefs,readonly} from &#39;vue&#39;
Copier après la connexion

Passez l'objet réactif en lecture seule.

let userinfo = reactive({
  firstName: "666",
  lastName: ""
});
userinfo = readonly(userinfo);
Copier après la connexion

watchEffect dans la configuration

watchEffect dans la configuration a les fonctionnalités suivantes.

Capable de surveiller les modifications des données dans la configuration. Une fois les données modifiées, la fonction de rappel dans watchEffect sera exécutée.

Les données de la configuration ne changeront pas en temps réel et seront exécutées une fois initialement.

setup() {
    let data = reactive({
      num: 1
    });
    watchEffect(() => {
      console.log(`num2=${data.num}`);
    });
    setInterval(() => {
      data.num++;
    },1000)
    return {
      ...toRefs(data)
    }
  }
Copier après la connexion

watch in setup

La méthode de base pour utiliser la montre pour surveiller les données.

setup() {
    let keyword = ref("111");
    watch(keyword,(newData,oldData) => {
      console.log("newData是:",newData);
      console.log("oldData是:",oldData);
    })
    return {
      keyword
    }
  }
Copier après la connexion

La différence entre watch et watchEffect

watch ne sera pas exécutée lorsque la page sera rendue pour la première fois, mais watchEffect le sera.

watch peut obtenir les valeurs avant et après les changements d'état des données.

La fonction de hook de cycle de vie dans la configuration

Présentation de lAPI Composition et de son utilisation principale dans Vue3

Le hook de cycle de vie dans la configuration est similaire à l'appel direct d'une fonction.

  setup() {
    let keyword = ref("111");
    watch(keyword,(newData,oldData) => {
      console.log("newData是:",newData);
      console.log("oldData是:",oldData);
    })
    onMounted(() => {
      console.log(&#39;onMounted&#39;);
    })
    onUpdated(() => {
      console.log(&#39;onUpdated&#39;);
    })
    return {
      keyword
    }
  }
Copier après la connexion

Les accessoires de configuration

sont transmis au composant parent.

<Search :msg="msg" />
Copier après la connexion

Déclaration de réception

props: [&#39;msg&#39;],
  setup(props) {
    console.log(props);
  }
Copier après la connexion

Fournir avec inject

Parfois, nous devons transmettre des données du composant parent au composant enfant, mais si le composant parent au composant enfant est une relation profondément imbriquée, la transmettre via des accessoires le fera devient très gênant. Dans ce cas, nous pouvons utiliser provide et inject pour y parvenir.

  • Utilisation générale

Le composant racine transmet les données via Provide.

export default {
  data() {
    return {
    }
  },
  components: {
    Home
  },
  provide() {
    return {
      title: "app组件里面的标题"
    }
  }
}
Copier après la connexion

Les composants qui doivent recevoir des données sont reçus via l'instruction inject

export default {
  inject: [&#39;title&#39;],
  data() {
    return {
    }
  },
  components: {
  }
}
Copier après la connexion

Après avoir reçu l'instruction, ils peuvent être utilisés directement.

<template>
  <div class="container">
    这是Location组件
    {{title}}
  </div>
</template>
Copier après la connexion
  • provide peut obtenir les données dans ce

export default {
  data() {
    return {
      title: "根组件的数据"
    }
  },
  components: {
    Home
  },
  provide() {
    return {
      title: this.title
    }
  }
}
Copier après la connexion

Remarque : dans l'usage général ci-dessus, si les données du composant parent changent, le composant enfant ne changera pas, il est donc recommandé d'utiliser la composition suivante Fournir et injecter dans l'API peut réaliser des changements synchrones.

fournir et injecter dans la configuration

Composant racine

import Home from &#39;./components/Home.vue&#39;
import {ref,provide} from &#39;vue&#39;
export default {
  setup() {
    let title = ref(&#39;app根组件里面的title&#39;);
    let setTitle = () => {
      title.value = "改变后的title"
    }
    provide("title",title);
    return {
      title,
      setTitle
    }
  },
  data() {
    return {
    }
  },
  components: {
    Home
  }
}
Copier après la connexion

Composants qui utilisent des données

import {inject} from &#39;vue&#39;
export default {
  setup() {
    let title = inject(&#39;title&#39;);
    return {
      title
    }
  },
  data() {
    return {
    }
  },
  components: {
  }
}
Copier après la connexion

Différent des accessoires, les données du composant enfant seront synchronisées avec le composant parent si la liaison de données bidirectionnelle est utilisée.

Apprentissage recommandé : "La dernière sélection de 5 tutoriels vidéo vue.js"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:juejin.im
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal