Configuração de açúcar de sintaxe Vue3 (2)

Adquira o hábito de escrever juntos! Este é o 8º dia da minha participação no "Nuggets Daily New Plan · April Update Challenge", clique para ver os detalhes do evento .

No vue2, as duas APIs, watch e computed, são muito úteis para nós, hoje falarei sobre essas duas APIs.

calculado

computed在vue3中以函数形式存在,传入一个对象,当里面的依赖被读取是,调用get函数,被修改时调用set函数
会返回一个ref对象
复制代码

Escreva um caso clássico

É necessário fornecer um sobrenome e um primeiro nome. Precisamos enviar o nome. Alguns alunos podem usar diretamente a emenda de strings, o que também é possível, mas usaremos o atributo computado para tentar agora.

definir e obter

Uma vez que a variável da qual a função set depende for modificada, a função set será executada imediatamente

A variável da qual depende a função get, desde que seja lida, a função get será executada

Essas duas funções são muito simples e são o princípio da capacidade de resposta no vue2

caso

Definir lastName, firstName, atualizar funções de atualização, fullName é o nome

setup() {
  const firstName = ref("李")
  const lastName = ref("华")
  const update = ()=>{
    firstName.value = "孙"
  }
  let fullName = computed({
    get(){
      console.log("get"+'函数被调用');
      return firstName.value+lastName.value
    },
    set(value){
      console.log(“set函数被调用”);
    }
  })
  return {
    fullName,
    update
  }
}
复制代码

fullName é uma propriedade computada. Quando a dependência get for modificada, a função get será executada imediatamente e novos dados serão retornados. Ela só será chamada quando o próprio fullname for modificado. A função set é diferente.

obter função.gifPodemos ver que quando abrimos a página web, a função get será executada primeiro, e então a função get será executada novamente quando o fristName for modificado.

Função de relógio

Duas APIs, watchEffect e watch, são fornecidas na configuração. Ambas podem ser usadas para monitoramento. A diferença será resumida posteriormente.

watchEffect

watchEffect自动收集依赖,初始化运行,返回值为stop一个函数,调用会停止监听
可以传入一个函数,第一次执行时自动收集获取依赖
复制代码

Esta função não requer que especifiquemos dependências, ela obterá as dependências correspondentes quando for executada pela primeira vez

setup() {
  const name = ref("scc")
  const age = ref(18)
  const update = ()=>{
    age.value++

  }
  watchEffect(()=>{
    console.log(age.value);
  })
  return {
    name,
    age,
    update
  }
}
复制代码

Defina um nome, variável de idade, método de atualização para atualizar a idade, watchEffect escuta o valor de idade

Podemos dar uma olhada nos resultados em execução

watchEffect.gifPode-se ver que quando o navegador é atualizado, o programa é executado automaticamente uma vez, e podemos monitorar a alteração do valor da idade

propriedade nivelada

Vamos falar sobre como obter o elemento dom na configuração. No vue2, obtemos o elemento dom através de $refs. No vue3, podemos dar ao elemento dom um atributo ref, definir esse atributo na configuração e passá-lo, podemos passe este atributo obtenha o elemento dom

setup() {
      const root = ref(null)
      const name = ref("scc")
      watchEffect(()=>{
        console.log(root.value);
      })
      return {
        root
      }
复制代码

Definimos root e o distribuímos, adicionamos o atributo ref ao elemento dom e observamos a saída do navegador

getDom.gifNeste ponto, podemos obter o elemento dom, mas ele é executado duas vezes, e todos descobriram, na primeira vez ele gera null e na segunda vez é o elemento dom

Por que é isso? Porque nossa função watchEffect é inicializada uma vez quando o dom não é atualizado e executado novamente quando o dom é montado

Como evitar isso, pode ser feito apenas uma vez

Sim, podemos usar o objeto flush

Um objeto flush pode ser configurado atrás de watchEffect. O padrão é pre, que é inicializado e executado. Ele pode ser modificado para pós-inicialização para não ser executado.

vamos tentar

setup() {
  const root = ref(null)
  watchEffect(()=>{
    console.log(root.value);
  },{
    flush:"post"
  })
  return {
    root
  }
}
复制代码

Adicionamos um objeto a watchEffect

postWatchEffect.gifNeste ponto watchEffect é executado apenas uma vez

Pare

O valor de retorno de watchEffect é uma função que pode ser executada para interromper o monitoramento

setup() {
  const name = ref("scc")
  const age = ref(18)
  const update = ()=>{
    age.value++
  }
  const stop = watchEffect(()=>{
    console.log(age.value);
    if(age.value>25){
      stop()
    }
  })
  return {
    name,
    age,
    update,
  }
}
复制代码

Ouvimos o atributo idade e, quando for maior que 25, paramos de ouvir

watchEffectAge.gifPodemos ver que quando é maior que 25, a página ainda é atualizada, mas os dados não são mais gerados.

ver

O primeiro parâmetro de watch é o valor a ser monitorado, que pode ser um objeto ref, um objeto reativo, uma função callback e o segundo parâmetro é uma função callback.Quando o valor monitorado mudar, a função callback será chamada.

Ouça objetos reativos

setup() {
  const info = reactive({age:18})
  const update = ()=>{
    console.log(info.age);
    info.age++
  }
  watch(info,(newValue,oldValue)=>{
    console.log(newValue+"------------------"+oldValue);
  },{
    deep:true
  })
  return{
    info,
    update
  }
}
复制代码

Definir informações, atualizar informações de alteração de idade, ver informações do monitor

watchINfo.gifÉ possível ouvir informações, mas oldvalue e newvalue parecem ser diferentes do esperado

Isso ocorre porque newValue e oldValue também são objetos reativos. Se você quiser se tornar um valor, você pode converter o objeto reativo em um objeto () =>{return {...info}}

setup() {
  const info = reactive({age:18,name:"scc"})
  const update = ()=>{
    console.log(info.age);
    info.age++
  }
  watch(()=>({...info}),(newValue,oldValue)=>{
    console.log(newValue,oldValue);
  })
  return{
    info,
    update
  }
}
复制代码

Desconstruímos as informações e monitoramos o objeto estruturado

watchReactive.gif

Como você pode ver, está tudo bem

monitorar objeto de referência

setup() {
  const age = ref(18)
  const update = ()=>{
    console.log(age.value);
    age.value++
  }
  watch(age,(newValue,oldValue)=>{
    console.log(newValue,oldValue);
  })
  return{
    age,
    update
  }
}
复制代码

Crie a idade do objeto ref, atualize a idade da atualização, assista a idade do monitor

ewfWatch.gif

Pode monitorar normalmente, exibir conteúdo

Monitore vários dados

如果需要监听多个数据,可以传入一个数组
复制代码

O terceiro parâmetro do relógio, item de configuração

deep深度侦听默认为true,结构出来对象没有侦听,需要开启
immediate最开始是否运行
复制代码

Terminar

到此结束,明天接着更新
复制代码

Acho que você gosta

Origin juejin.im/post/7087442636142804999
Recomendado
Clasificación