[Vue3] ciclo de vida y enlace personalizado y toRef, otra API combinada

El ciclo de vida de Vue2

  • antes de crear
  • crear
  • beforeMount (antes del montaje)
  • montado (después del montaje)
  • beforeUpdate (antes de la actualización)
  • Actualizado (actualizado)
  • beforeDestroy (antes de la destrucción)
  • destruido

Ciclo de vida de Vue3 y ganchos de ciclo de vida

  • beforeCreate——configuración
  • crear——configurar
  • beforeMount (antes del montaje) - onBeforeMount
  • montado (después del montaje) - onMounted
  • beforeUpdate——onBeforeUpdate
  • Actualizado (actualizado) - onUpdated
  • beforeUnmount (antes de desmontar) - onBeforeUnmount
  • desmontado——en Desmontado
  • Según sea necesario, puede hacer referencia al enlace del ciclo de vida correspondiente en la importación en la página y luego usarlo directamente en la configuración
  • Cuando el ciclo de vida combinado y el ciclo de vida del elemento de configuración se configuran juntos, se encuentra que el ciclo de vida combinado es un poco más rápido que el mismo nivel
    inserte la descripción de la imagen aquí

Función de gancho personalizado

  • Es esencialmente una función que encapsula la API de composición utilizada en la función de configuración
  • Similar a mezclar en Vue2
  • Los ganchos personalizados hacen que la lógica de la configuración sea más clara y fácil de entender

Del mismo modo, cree un nuevo js

  • Encapsule el código en la configuración.
import {
    
    ref,reactive, onMounted, onBeforeMount } from "vue";

//实现鼠标打点的hook
export default function activepoint() {
    
    
    let ispoint = ref('ispoint')
    let point = reactive({
    
    
        x: 0,
        y: 0,
    });
    function savepoint(event) {
    
    
        console.log(event)
        point.x = event.pageX;
        point.y = event.pageY;
    }
    function changeispoint() {
    
    
        ispoint.value = !ispoint.value
    }
    onMounted(() => {
    
    
        window.addEventListener("click", savepoint);
    });
    onBeforeMount(() => {
    
    
        window.removeEventListener("click", savepoint);
    });
    return {
    
    
        point
    };
}

en la página que necesita usar

  • introducción de importación
import userPoint from "../utils/point";
  • usar
setup() {
    
    
    const point = userPoint();
    return {
    
     point };
  },

aRef

  • Cree un objeto ref cuyo valor apunte a una propiedad en otro objeto
  • El siguiente código parece estar bien, pero pierde capacidad de respuesta
  • Motivo: cuando regresa, en realidad define una nueva variable y recibe una cadena parant.name, es decir, reasigna la cadena Kilimanjaro a name
export default {
    
    
  name: "Demo",
  setup() {
    
    
    let parant =reactive({
    
    
      name: "乞力马扎罗",
      sum:0,
      job: {
    
    
        a: 1,
        b: 2,
      },
    }) 
    return {
    
    
      name: parant.name,
      sum:parant.sum,
    };
  },
};
  • Solución:
  • Parámetro 1, qué objeto desea operar, parámetro 2, qué valor en el objeto desea operar
  • No importa cuántas capas de objetos, el segundo parámetro es el valor que desea usar
 return {
    
    
      name: toRef(parant, "name"),
      sum: toRef(parant, "sum"), 
      a: toRef(parant.job, "a"), 
      
  };

La diferencia entre toRef y ref

  • Al devolver tanto los datos de origen como los valores en los datos de origen:
  • toref es vincular el valor en los datos de origen. Los datos de origen seguirán los cambios
  • La referencia no es el objeto de los datos de origen, sino el objeto de referencia de la referencia recién creada, lo que provocará la separación de datos.
Caso 1

inserte la descripción de la imagen aquí

<template>
  <!-- VUE3组件中的模板结构可以没有根标签 -->
  <div>{
    
    {
    
    parant}}</div>
  <div>{
    
    {
    
     sum }}</div>
  <button @click="sum++">sum++</button>
  <div>{
    
    {
    
     b }}</div>
  <button @click="b++">sum++</button>
</template>

<script>
import {
    
     ref, reactive, onMounted, onBeforeMount, toRef } from "vue";
export default {
    
    
  name: "Demo",
  setup() {
    
    
    let parant = reactive({
    
    
      name: "乞力马扎罗",
      sum: 0,
      job: {
    
    
        a: 1,
        b: 2,
      },
    });
    return {
    
    
      parant,
      name: toRef(parant, "name"),
      sum: toRef(parant, "sum"), //参数1,想操作哪个对象,参数2,想操作对象里的哪个值
      b: ref(parant.job.b),
    };
  },
};
</script>

<style>
</style>

toRefs, puede devolver múltiples

  • torefs, puede crear múltiples objetos ref en lotes, pero solo puede crear la primera capa del objeto, no puede crear la capa profunda juntos
  • Debido a que lo que se crea es un objeto, si desea usar la primera capa en el objeto, debe pasar es6's ...

inserte la descripción de la imagen aquí

Pero si desea utilizar el objeto en el objeto directamente en la página
  • Método 1
  • Lance una capa y úsela de una manera similar a job.a en la página
 ...toRefs(parant), //只给个想操作的对象即可
<div>{
    
    {
    
     job.a }}</div>
<button @click="job.a++">job.a++</button>
  • Método 2
  • Cuando se lanza un objeto, el objeto en el objeto se lanza directamente
...toRefs(parant.job), //只给个想操作的对象即可

Visualización de la imagen del código:
inserte la descripción de la imagen aquí

Otras API combinadas

superficialReactivo和superficialReferencia

superficialReactivo (superficial sensible)
  • superficialReactivo solo maneja la capacidad de respuesta de las propiedades más externas del objeto (capacidad de respuesta superficial)
    inserte la descripción de la imagen aquí
La diferencia entre ref superficial y ref.
  • Cuando ref responde a un objeto, el reactivo se usará internamente para responder
  • superficialRef solo responde a datos básicos y no utiliza reactivos internamente para responder

inserte la descripción de la imagen aquí

solo lectura 和 superficial Solo lectura

solo lectura (solo lectura profunda)
  • readonly hace que los datos receptivos sean de solo lectura
  • Proteja los datos de la modificación
 setup() {
    
    
    let parant2 = shallowReactive({
    
    
      name: "乞力马扎罗",
      sum: 0,
      b: 2,
      job: {
    
    
        a: 1,
      },
    });
    parant2 = readonly(parant2);
    return {
    
    
      parant2,
    };
  },

inserte la descripción de la imagen aquí

superficialReadonly (solo lectura superficial)
  • Es hacer que la primera capa del objeto sea de solo lectura e inmodificable.
    inserte la descripción de la imagen aquí

toRaw y markRaw

toRaw (conversión temporal)
  • Convierta un objeto reactivo generado por reactivo en un objeto normal
  • Tenga en cuenta que solo los datos reactivos definidos por reactivo se pueden convertir
  • Función: se utiliza para leer el objeto común correspondiente al objeto receptivo. Todas las operaciones en este objeto común no causarán actualizaciones de la página.
markRaw (conversión permanente)
  • Marca un objeto para que nunca vuelva a ser reactivo.
  • Escenario: algunos valores no deben configurarse de manera receptiva, por ejemplo, bibliotecas complejas de terceros
  • Omitir las transiciones reactivas puede mejorar el rendimiento al representar listas grandes con fuentes de datos inmutables

inserte la descripción de la imagen aquí

customRef (referencia personalizada)

  • Cree una referencia personalizada y control de visualización sobre su seguimiento de información dependiente y activadores de actualización

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_44899940/article/details/131741123
Recomendado
Clasificación