Resumo das perguntas comuns da entrevista Vue
Modelo MVVM?
MVVM, Model-View-ViewModel
abreviatura de MVVM, é essencialmente MVC
uma versão atualizada do modelo. Entre eles Model
, representa o modelo de dados, View
representa a página que você vê ViewModel
e é a ponte entre e. Os dados serão vinculados à View
camada e renderizarão automaticamente os dados na página. Quando a visualização for alterada, a camada será notificada para atualizar os dados. Anteriormente a visualização era atualizada por meio de ações, agora é .Model
ViewModel
ViewModel
DOM
数据驱动视图
Ciclo de vida do Vue
O ciclo de vida do Vue pode ser dividido em 8 etapas: antes e depois da criação, antes e depois da montagem, antes e depois da atualização, antes e depois da destruição, bem como o ciclo de vida de alguns cenários especiais. O Vue 3 também adiciona três novas cenas para depuração e renderização no servidor.
Ganchos de ciclo de vida no Vue 2 | Opções de ciclo de vida para API de opções Vue 3 | Ganchos de ciclo de vida na API de composição Vue 3 | descrever |
---|---|---|---|
beforeCreate |
beforeCreate |
setup() |
Antes da criação, os dados neste momento ainda data não methods foram inicializados. |
created |
created |
setup() |
Após a criação, data ele contém um valor, ainda não foi montado e algumas Ajax solicitações podem ser feitas. |
beforeMount |
beforeMount |
onBeforeMount |
Antes da montagem, o virtual será encontrado DOM e compilado emRender |
mounted |
mounted |
onMounted |
Após a montagem, DOM ele é criado e pode ser utilizado para obter acesso a dados e DOM elementos |
beforeUpdate |
beforeUpdate |
onBeforeUpdate |
Antes da atualização, pode ser usado para obter vários status antes da atualização |
updated |
updated |
onUpdated |
Após a atualização, todos os status estão atualizados |
beforeDestroy |
beforeUnmount |
onBeforeUnmount |
Pode ser usado para cancelar alguns temporizadores ou assinaturas antes da destruição |
destroyed |
unmounted |
onUnmounted |
Após a destruição, pode ser utilizado para o cancelamento de alguns temporizadores ou assinaturas |
activated |
activated |
onActivated |
keep-alive Quando um componente em cache é ativado |
deactivated |
deactivated |
onDeactivated |
keep-alive Quando um componente em cache é desativado |
errorCaptured |
errorCaptured |
onErrorCaptured |
Chamado ao capturar um erro de um componente descendente |
- | renderTracked |
onRenderTracked |
Gancho de depuração, chamado quando dependências reativas são coletadas |
- | renderTriggered |
onRenderTriggered |
Gancho de depuração, chamado quando a dependência reativa é acionada |
- | serverPrefetch |
onServerPrefetch |
Chamado antes da instância do componente ser renderizada no servidor |
**Em relação ao ciclo de vida no Vue 3, recomenda-se a leitura da documentação oficial <img src="https://link.juejin.cn/?target=https%3A%2F%2Fcn.vuejs.org%2Fapi% 2Fcomposition-api-lifecycle .html “https://cn.vuejs.org/api/composition-api-lifecycle.html”)[API opcional: opções de ciclo de vida – documentação oficial](https://link.juejin.cn/ ?target= https%3A%2F%2Fcn.vuejs.org%2Fapi%2Foptions-lifecycle.html “https://cn.vuejs.org/api/options-lifecycle.html”” style=”margem: automático” / >
Ciclo de vida dos componentes pai-filho: * 加载渲染阶段
: pai beforeCreate -> pai criado -> pai beforeMount -> filho beforeCreate -> filho criado -> filho beforeMount -> filho montado -> pai montado
更新阶段
: Pai antes de atualizar -> Filho antes de atualizar -> Filho atualizado -> Pai atualizado销毁阶段
: pai antes de destruir -> filho antes de destruir -> filho destruído -> pai destruído
Vue.$próximoTick
Execute o retorno de chamada atrasado após o próximo ciclo de atualização do DOM. Use este método imediatamente após modificar os dados para obter o DOM atualizado.
nextTick
É uma API global fornecida pelo Vue. Devido à estratégia de atualização assíncrona do Vue, nossas modificações de dados não serão refletidas diretamente no DOM. Neste momento, se quisermos obter o status atualizado do DOM imediatamente, precisamos usar este método.
O Vue é executado de forma assíncrona ao atualizar o DOM. Quando os dados mudam, o Vue abre uma fila de atualização assíncrona e armazena em buffer todas as alterações de dados que ocorrem no mesmo loop de eventos. Se o mesmo watcher
for acionado várias vezes, ele só será colocado na fila uma vez. Essa desduplicação durante o buffer é muito importante para evitar cálculos e operações DOM desnecessárias. nextTick
O método adicionará uma função de retorno de chamada à fila para garantir que a função seja chamada somente após a conclusão da operação DOM anterior.
cenas a serem usadas:
1. Se desejar obter a DOM
estrutura atualizada imediatamente após modificar os dados, você pode usar Vue.nextTick()
2. Operar created
no ciclo de vidaDOM
O que acontece durante o processo de montagem da instância Vue?
O processo de montagem refere-se ao app.mount()
processo, que é um processo de inicialização que faz duas coisas como um todo: 初始化
e 建立更新机制
.
A inicialização criará instâncias de componentes, inicializará estados de componentes e criará vários dados responsivos.
A etapa de estabelecer o mecanismo de atualização executará imediatamente a função de atualização do componente, que executará a função de renderização do componente pela primeira vez e será convertida em; ao mesmo tempo, executar a função de renderização pela primeira vez patch
criará uma dependência entre seu interno dados responsivos e a função de atualização do componente, que fará com que a função de atualização correspondente seja executada quando os dados mudarem no futuro.vnode
dom
Princípio de compilação do modelo Vue
Existe um módulo compilador exclusivo no Vue chamado compiler
.Sua principal função é template
compilar funções escritas pelo usuário em render
funções executáveis em js. No Vue, o compilador irá primeiro template
analisar, esta etapa é chamada parse
, após o final, um objeto JS é obtido, que é chamado 抽象语法树AST
; depois há AST
um processo de conversão para processamento profundo, esta etapa é chamada , e finalmente o código JS transform
obtido anteriormente é gerado AST
, ou seja, render
função.
Princípios de capacidade de resposta do Vue
1. A capacidade de resposta dos dados no Vue 2 será processada de forma diferente de acordo com o tipo de dados. Se for um objeto, ao Object.defineProperty(obj,key,descriptor)
interceptar o acesso ao atributo do objeto, ele detectará e reagirá quando os dados forem acessados ou alterados; se for um array, estenderá seus 7 métodos de mudança (push, pop, shift, unshift, splice, sort , reverso), para que esses métodos possam executar notificações de atualização adicionais para responder. Desvantagens: * A travessia recursiva durante a inicialização causará perda de desempenho; * O processo de atualização de notificação precisa manter um grande número de dep
instâncias e watcher
instâncias, o que ocupa muita memória adicional; * Adicionar ou excluir atributos de objetos não pode ser interceptado e precisa para passar Vue.set
e delete
tal API para entrar em vigor; * Essas estruturas de dados ES6
recém-geradas não são suportadas Map
. 2. O mecanismo proxy usado no Vue 3 requer dados responsivos. Ele pode suportar objetos e matrizes ao mesmo tempo. Adições e exclusões de atributos dinâmicos podem ser interceptadas. Todas as novas estruturas de dados são suportadas. Os atributos aninhados de objetos são recursivos em tempo de execução e são proxy somente quando usados. Não há necessidade de manter um número particularmente grande. número de dependências e o desempenho foi bastante melhorado. Grande progresso.Set
ES6
Proxy
DOM virtual
1. Conceito: Virtual DOM, como o nome sugere, é um objeto DOM virtual, é um objeto JS em si, mas descreve uma estrutura de visualização por meio de diferentes atributos. 2. Benefícios do DOM virtual: (1) Melhoria de desempenho. Existem limitações para operar diretamente o DOM. Existem muitos atributos em um elemento real. Se você operá-lo diretamente, muitos conteúdos de atributos adicionais serão operados ao mesmo tempo. Isto é não é o caso, é necessário. Se essas operações forem transferidas para objetos JS, será muito mais simples. Além disso, operar o DOM é relativamente caro e operações frequentes do DOM podem facilmente causar redesenho e refluxo da página. Se o processamento intermediário for realizado por meio de VNode abstrato, o número de operações DOM diretas poderá ser efetivamente reduzido, reduzindo assim o redesenho e o refluxo da página. (2) É conveniente para implementação de plataforma cruzada. O mesmo nó VNode pode ser renderizado em conteúdo correspondente em plataformas diferentes. Por exemplo: quando renderizado no navegador, é um nó de elemento DOM, e quando renderizado em Native (iOS, Android), torna-se o controle correspondente. O Vue 3 permite que os desenvolvedores implementem renderizadores personalizados baseados em VNode para facilitar a renderização para diferentes plataformas. 3. Estrutura: Não existe um padrão unificado, geralmente incluindo três itens tag
:,, props
e children
. tag
:obrigatório. É um rótulo, pode ser um componente ou uma função. props
: Opcional. São as propriedades e métodos neste rótulo. children
: Opcional. É o conteúdo ou nós filhos desta tag. Se for um nó de texto, é uma string; se tiver nós filhos, é um array. Em outras palavras, se for considerado children
uma string, significa que deve ser um nó de texto e que esse nó não deve ter elementos filhos. ### algoritmo de comparação
1. Conceito: diff
O algoritmo é um algoritmo de comparação. Ao comparar o antigo DOM virtual e o novo DOM virtual, podemos descobrir qual nó virtual mudou. Encontre este nó virtual e atualize apenas o nó real correspondente a este nó virtual. Em vez disso Ao atualizar outros nós que não foram alterados, o DOM real pode ser atualizado com precisão, melhorando assim a eficiência. 2. Método de comparação: diff
A estratégia geral do algoritmo é: 深度优先,同层比较
. As comparações serão realizadas apenas no mesmo nível e não serão comparadas entre níveis; durante o processo de comparação, o loop diminuirá de ambos os lados para o meio.
tag
Primeiro, determine se os dois nós são iguais. Se forem diferentes, exclua o nó e crie um novo nó para substituí-lo.tag
Quando são iguais, os atributos são substituídos primeiro e depois os subelementos são comparados, que se dividem nas seguintes situações: * Quando os nós antigo e novo possuem subelementos, o método de ponteiro duplo é utilizado para comparação. Compare os ponteiros inicial e final antigos e novos, mova o loop para mais perto do meio, chame parapatchVnode
repetirpatch
o processo de acordo com a situação, chame paracreateElem
criar um novo nó, encontre um nókey
consistenteVNode
na tabela hash e, em seguida, opere de acordo com o situação. * Se o novo nó tiver elementos filhos e o nó antigo não tiver elementos filhos, basta converter o nó virtual do elemento filho em um nó real e inseri-lo. * Se o novo nó não tiver elementos filhos e o nó antigo tiver elementos filhos, os elementos filhos serão limpos e definidos como o conteúdo de texto do novo nó. * Quando os nós antigo e novo não possuem elementos filhos, ou seja, ambos são nós de texto, o conteúdo do texto será comparado diretamente e, se forem diferentes, serão atualizados.
Qual é o papel da chave no Vue?
key
A principal função é 为了更加高效的更新虚拟 DOM
.
Quando Vue determina se dois nós são iguais, ele determina principalmente key
a soma dos dois 元素类型tag
. Portanto, se não estiver definido key
, seu valor é indefinido, podendo sempre ser considerado que se trata de dois nós idênticos, e apenas operações de atualização poderão ser realizadas, o que causará um grande número de operações de atualização do DOM.
Por que os dados no componente são uma função?
Em new Vue(), pode ser uma função ou um objeto, pois há apenas uma instância raiz e nenhuma poluição de dados ocorrerá.
Em um componente, os dados devem ser uma função para evitar que vários objetos de instância de componente compartilhem os mesmos dados e causem poluição de dados; na forma de uma função, quando initData é usado como uma função de fábrica, um novo objeto de dados será retornado .
Como se comunicar entre componentes no Vue?
1. Comunicação entre componentes pai-filho: o pai passa dados para o filho props
e o filho transmite dados para o pai $emit
acionando eventos; a comunicação também pode ser feita através da cadeia pai/cadeia filho ( $parent
/ $children
); ref
instâncias de componentes também podem ser acessadas ; provide
/ inject
; $attrs
/ $listeners
. 2. Comunicação de componentes Brother: barramento de eventos globais EventBus
. 3. Comunicação de Vuex
componentes entre níveis: barramento de eventos globais EventBus
,, / . ### Qual é a diferença entre v-show e v-if?Vuex
provide
inject
1. Diferentes métodos de controle. v-show
Ao adicionar atributos css ao elemento display: none
, o elemento ainda existe; enquanto v-if
controlar a exibição ou ocultação do elemento é adicionando ou excluindo o elemento inteiro.
2. O processo de compilação é diferente. v-if
Há um processo parcial de compilação/desinstalação para comutação. Durante o processo de comutação, os ouvintes e subcomponentes de eventos internos são devidamente destruídos e reconstruídos; é apenas uma v-show
simples troca baseada em CSS.
3. As condições de compilação são diferentes. v-if
É uma renderização condicional verdadeira. Ela garantirá que os ouvintes de eventos e subcomponentes dentro do bloco condicional sejam devidamente destruídos e reconstruídos durante o processo de comutação. Quando a condição de renderização for falsa, nenhuma operação será executada até que seja verdadeira.
4. O ciclo de vida do gatilho é diferente. v-show
Ao mudar de falso para verdadeiro, o ciclo de vida do componente não será acionado; ao v-if
mudar de falso para verdadeiro, os ganchos do componente serão acionados, e ao beforeCreate
mudar de verdadeiro para falso, os ganchos do componente serão acionados . 5. O consumo de desempenho é diferente. Há um custo de troca mais alto; há um custo de renderização inicial mais alto.created
beforeMount
mounted
beforeDestory
destoryed
v-if
v-show
Cenário de uso: Se você precisar alternar com muita frequência, é v-show
melhor usá-lo, como: menu acordeão, página de guias, etc.; se as condições raramente mudam durante o tempo de execução, é v-if
melhor usá-lo, como: após o login do usuário, exibição de acordo com diferentes permissões Conteúdo diferente.
Qual é a diferença entre computado e relógio?
computed
As propriedades calculadas dependem de outras propriedades para calcular valores. Qualquer alteração em qualquer dependência interna executará novamente a função. As propriedades calculadas têm um cache. Quando as propriedades calculadas são reutilizadas várias vezes, o valor de retorno será obtido do cache. O valor calculado propriedades devem ter palavras-chavereturn
.watch
Detecte alterações em determinados dados para acionar a função. Quando os dados são de um tipo de objeto, você precisa usar odeep
atributo de escuta profunda quando o valor do atributo no objeto muda ou pode usar o atributo de escuta imediata quando a página é carregada pela primeira vezimmdiate
.
Cenários de uso: As propriedades computadas são geralmente usadas na renderização do modelo. Um determinado valor depende de outros objetos de resposta ou mesmo de propriedades calculadas; as propriedades de escuta são adequadas para observar alterações em um determinado valor para completar uma lógica de negócios complexa.
Por que v-if e v-for não são recomendados para serem usados juntos?
No Vue 2, v-for
a taxa de prioridade v-if
é maior , o que significa que v-if
será executado separadamente em cada v-for
loop. Se a matriz a ser percorrida for grande e os dados reais a serem exibidos forem muito pequenos, isso causará um enorme desperdício de desempenho.
No Vue 3 é exatamente o contrário, v-if
com prioridade maior v-for
, então v-if
quando executada a variável que ele chama ainda não existe, o que causará uma exceção.
Geralmente há duas situações que levam a isso:
- Para filtrar itens em uma lista, por exemplo:
v-for = "user in users" v-if = "user.active"
. Neste caso, você pode definir uma propriedade calculada e deixá-la retornar a lista filtrada. - Para evitar renderizar uma lista que deveria estar oculta,
v-for = "user in users" v-if = "showUsersFlag"
por ex. Nesse caso, você podev-if
movê-lo para o elemento contêiner ou envolvê-lo com uma camada externatemplate
.
definir método no Vue 2?
set
É uma API global em Vue 2 . Os dados responsivos podem ser adicionados manualmente para resolver o problema de as visualizações de alteração de dados não serem atualizadas. Ao definir diretamente o valor de um item na matriz ou definir diretamente o valor de uma propriedade do objeto no projeto, você descobrirá que a página não é atualizada. Isso se deve Object.defineProperty()
à limitação de que as alterações de dados não podem ser monitoradas, o que pode ser this.$set(数组或对象,数组下标或对象的属性名,更新后的值)
resolvido.
O que é manter vivo?
- Função: Implementar cache de componentes, manter o status dos componentes e evitar problemas de desempenho causados por renderizações repetidas.
- Princípio de funcionamento: Vue.js abstrai internamente os nós DOM em nós VNode, e
keep-alive
o cache de componentes também é baseado em nós VNode. Ele armazena em cache os componentes que atendem às condições do objeto de cache e, ao renderizar novamente, o nó VNode é retirado do objeto de cache e renderizado. - Os seguintes atributos podem ser definidos: ①
include
: String ou expressão regular. Somente componentes com nomes correspondentes serão armazenados em cache. ②exclude
: String ou expressão regular, qualquer componente com um nome correspondente não será armazenado em cache. ③max
: Número, o número máximo de instâncias de componentes que podem ser armazenadas em cache. A correspondência primeiro verifica as opções do componentename
. Sename
a opção não estiver disponível, ela corresponde ao seu nome de registro local (o valor-chave da opção de componentes do componente pai). Componentes anônimos não podem ser correspondidos.
Os componentes com cache configurado keep-alive
terão mais dois ganchos de ciclo de vida: activated
, deactivated
. Ao entrar no componente pela primeira vez: beforeCreate --> criado --> beforeMount --> montado --> ativado --> beforeUpdate --> atualizado --> desativado Ao entrar novamente no componente: ativado --> beforeUpdate - -> atualizado --> desativado
mixando
mixin
(Mixin), que fornece uma maneira muito flexível de distribuir funcionalidades reutilizáveis em componentes Vue.
Cenários de uso: Alguns códigos idênticos ou semelhantes são frequentemente usados em componentes diferentes e as funções desses códigos são relativamente independentes. O mesmo código ou semelhante pode ser extraído por meio de mixins.
deficiência:
1. A fonte das variáveis não é clara.
2. Múltiplos mixins podem causar conflitos de nomenclatura (solução: API de combinação do Vue 3).
3. Existe um relacionamento muitos-para-muitos entre mixins e componentes, tornando o projeto mais complexo.
slot
slot
Slots geralmente são usados dentro de componentes. Ao encapsular um componente, se você não tiver certeza de qual forma de elemento é exibida na posição dentro do componente, você pode ocupar slot
esta posição. O elemento nesta posição precisa ser passado na forma de conteúdo do componente pai. slot
Dividido em:
默认插槽
: O subcomponente usa<slot>
tags para determinar a posição de renderização. As estruturas podem ser colocadas em tagsDOM
como conteúdo de backup. Quando o componente pai está em uso, o conteúdo pode ser escrito diretamente na tag do subcomponente. Esta parte do conteúdo será inserida no<slot>
posição da tag do subcomponente. Se o componente pai for usado sem passar conteúdo para o slot, o conteúdo de apoio será exibido na página.具名插槽
: O subcomponente usaname
atributos para representar o nome do slot. Se não houver umname
slot especificado, haverá um nome implícitodefault
. Quando usada no componente pai,v-slot
a diretiva especifica em qual slot o elemento precisa ser colocado com base no slot padrão, e o valor é o valor do atributo slotv-slot
do componente filho .name
O usov-slot
de instruções para especificar em qual slot um elemento deve ser colocado deve corresponder<template>
ao elemento, e um<template>
elemento só pode corresponder a um slot reservado, ou seja, vários<template>
elementos não podem usarv-slot
instruções para especificar o mesmo slot.v-slot
A abreviatura de é#
, por exemplo,v-slot:header
pode ser abreviada como#header
.作用域插槽
: o subcomponente<slot>
vinculaprops
dados no rótulo para passar os dados do subcomponente ao componente pai para uso. O método para o componente pai obter os dados de adereços vinculados ao slot: 1. escopo = "nome da variável recebida":<template scope="接收的变量名">
2. slot-scope = "nome da variável recebida":<template slot-scope="接收的变量名">
3.v-slot: nome do slot = "nome da variável recebida" ":<template v-slot:插槽名="接收的变量名">
Quais são os modificadores no Vue?
No Vue, os modificadores lidam com muitos detalhes dos eventos DOM, de modo que não precisamos mais gastar muito tempo lidando com essas coisas problemáticas e podemos ter mais energia para nos concentrar no processamento lógico do programa. Os modificadores no Vue são divididos nos seguintes tipos:
1. Modificador de formulário lazy
Após o preenchimento das informações, o valor será atribuído a valor somente quando o cursor sair do rótulo, ou seja, change
as informações serão sincronizadas após o evento. number
Converte automaticamente o valor de entrada do usuário em tipo numérico, mas se o valor não puder ser parseFloat
analisado, o valor original será retornado. trim
Filtre automaticamente o primeiro e o último espaço inserido pelo usuário, mas os espaços do meio não serão filtrados.
2. O modificador de evento stop
evita que o evento borbulhe, o que equivale a chamar event.stopPropagation
um método. prevent
Prevenir o comportamento padrão do evento equivale a chamar event.preventDefault
o método. self
A função manipuladora só é event.target
acionada quando o próprio elemento atual. once
Após vincular o evento, ele só poderá ser acionado uma vez e não será acionado na segunda vez. capture
Use o modo de captura de eventos, ou seja, os eventos acionados pelo próprio elemento são processados primeiro aqui e depois entregues aos elementos internos para processamento. passive
Diga ao navegador que você não deseja bloquear o comportamento padrão do evento. Deixe o componente ouvir os eventos nativos do elemento raiz native
como a tag integrada, caso contrário, o componente ouvirá apenas os eventos personalizados. 3. Modificador do botão do mouse , clique com o botão esquerdo. clique com o botão direito. Clique com o meio. 4. Modificadores de valor de chave Os modificadores de teclado são usados para modificar eventos de teclado ( , ), como segue: Existem muitos, mas eles nos fornecem aliases, que são divididos nos dois tipos a seguir: * Teclas comuns (enter, tab, delete, space , esc, up...) * Teclas modificadoras do sistema (ctrl, alt, meta, shift...)html
v-on
left
right
middle
onkeyup
onkeydown
keyCode
vue
Qual é o seu entendimento sobre SPA?
1. Conceito: SPA(Single-page application)
, ou seja, aplicativo de página única, que é um modelo de aplicativo de rede ou site que interage com os usuários reescrevendo dinamicamente a página atual. Esse método evita interromper a experiência do usuário ao alternar entre as páginas. No SPA
, todo o código necessário (HTML, JavaScript e CSS) é recuperado com o carregamento de uma única página, ou os recursos apropriados são carregados dinamicamente e adicionados à página conforme necessário (geralmente em resposta às ações do usuário). A página não é recarregada em nenhum momento, nem controla a transferência para outras páginas. Por exemplo, assim como uma xícara, contém leite pela manhã, café ao meio-dia e chá à tarde, sempre tem o conteúdo e a xícara permanece inalterada. 2. A diferença SPA
entre MPA
: MPA(Muti-page application)
, ou seja, aplicativos de várias páginas. No MPA
, cada página é uma página principal e é independente. Sempre que uma página é acessada, os arquivos HTML, CSS e JS precisam ser recarregados, e os arquivos públicos são carregados sob demanda de acordo com a necessidade. || SPA | MPA || — | — | — || Composição | Uma página principal e vários fragmentos de página | Várias páginas principais || modo url | modo hash | modo histórico || Otimização de mecanismo de pesquisa SEO | Difícil de alcançar, mas possível Use o método SSR para melhorar | Fácil de implementar | | Transferência de dados | Fácil | Passado por url, cookie, localStorage, etc. | | Troca de página | Velocidade rápida, boa experiência do usuário | Troca de recursos de carregamento, velocidade lenta, experiência ruim do usuário | | Custo de manutenção | Relativamente fácil | Relativamente complexo | 3. SPA
Vantagens e Desvantagens: Vantagens: * Possui imediatismo de aplicativos desktop, portabilidade e acessibilidade de sites * Experiência do usuário boa e rápida, alterações de conteúdo não exigem recarregamento de toda a página * Bom antes e após a separação ponta a ponta, divisão mais clara do trabalho Desvantagens: * Não propício ao rastreamento do mecanismo de pesquisa * A primeira velocidade de renderização é relativamente lenta ### Ligação bidirecional?
1. Conceito: A ligação bidirecional no Vue é uma instrução v-model
que pode vincular dados responsivos à visualização, e alterações na visualização podem alterar o valor. É um açúcar sintático, que é equivalente a e v-model
por padrão . Seu uso pode reduzir muito código tedioso de processamento de eventos e melhorar a eficiência do desenvolvimento. 2. Uso: Geralmente usado em itens de formulário e também pode ser usado em componentes personalizados para representar o controle de entrada e saída de um determinado valor. 3. Princípio: É uma instrução. A ligação bidirecional é na verdade concluída pelo compilador Vue. Ao gerar a função de renderização do componente que contém o modelo, é na verdade a ligação de propriedades e monitoramento de eventos. As variáveis correspondentes serão feitas no função de retorno de chamada de evento.Operação de atualização.:value
@input
v-model
v-model
v-model
v-model
value
input
Os componentes filhos podem alterar diretamente os dados dos componentes pais?
1. Tudo prop
segue o princípio de ligação única, props
muda devido à atualização do componente pai e flui naturalmente o novo estado para baixo para o componente filho, sem passá-lo na direção inversa. Isso evita que os componentes filhos modifiquem acidentalmente o estado do componente pai, caso contrário, o fluxo de dados do aplicativo se tornaria facilmente confuso e difícil de entender. Além disso, toda vez que o componente pai for atualizado, todos os componentes filhos props
serão atualizados para os valores mais recentes, o que significa que você não deve modificar um dos componentes filhos prop
. Se você fizer isso, o Vue lançará um aviso no console.
2. No processo de desenvolvimento real, geralmente há dois cenários que requerem modificação prop
: * prop
é usado para passar um valor inicial e o subcomponente deseja usá-lo como um atributo de dados local posteriormente. Neste caso, é melhor definir um novo atributo de dados local e props
obter o valor inicial de . prop
* É necessária conversão adicional no valor repassado . prop
É melhor definir uma propriedade computada com base neste valor.
3. Na prática, se você realmente deseja alterar as propriedades do componente pai, emit
um evento deve ser usado para permitir a alteração do componente pai. Quando um objeto ou array props
é passado como um componente, embora o componente filho não possa alterar props
a ligação, ele ainda pode alterar o valor dentro do objeto ou array. Isso ocorre porque os objetos e arrays JS são passados por referência e, para o Vue, embora seja possível proibir tais alterações, isso causará uma enorme perda de desempenho, e o ganho supera o ganho.
Modos e princípios de roteamento comuns no Vue Router?
1. Modo hash: location.hash
O valor de * é o que segue # na URL. Sua característica é que embora o hash apareça na URL, ele não será incluído na solicitação HTTP e não terá nenhum impacto no backend, portanto, alterar o hash não recarregará a página.
- Você pode adicionar eventos de escuta para alterações de hash
window.addEventListener("hashchange", funcRef, false)
. Cada alteraçãohash (window.location.hash)
adicionará um registro ao histórico de acesso do navegador. Usando as características de hash acima, você pode implementar a função de roteamento de front-end para atualizar a visualização sem solicitar novamente a página . Características: Boa compatibilidade, mas não bonita 2. Modo histórico: Use os novos métodospushState()
ereplaceState()
na interface de histórico HTML5. Esses dois métodos são aplicados à pilha de histórico do navegador e, com base nosback
,forward
, e , existentes atualmentego
, fornecem a função de modificar o registro do histórico. Esses dois métodos têm algo em comum: quando são chamados para modificar a pilha de histórico do navegador, embora o URL atual tenha mudado, o navegador não atualizará a página. Isso significa que o roteamento front-end para aplicativos de página única "atualiza o visualiza, mas não solicita novamente a página." "Fornece recursos básicos: embora seja bonito, 404 aparecerá durante a atualização e requer configuração de back-end.
Roteamento dinâmico?
Muitas vezes precisamos mapear rotas para um determinado padrão de correspondência para o mesmo componente. Neste caso, precisamos definir o roteamento dinâmico. Por exemplo, temos um componente User, que deve ser usado para renderizar todos os usuários com IDs diferentes. Então, podemos usá-lo no caminho de roteamento do vue-router 动态路径参数(dynamic segment)
para obter este efeito: {path: '/user/:id', compenent: User}
, que :id
é o parâmetro do caminho dinâmico.
Entendendo o Vuex?
1. Conceito: Vuex é uma biblioteca de gerenciamento de estado dedicada ao Vue, que gerencia centralmente o estado do aplicativo de maneira global e usa regras correspondentes para garantir que o estado mude de forma previsível. 2. Problemas resolvidos: O principal problema que o Vuex resolve é o compartilhamento de estado entre vários componentes. Embora o compartilhamento de estado também possa ser alcançado usando vários métodos de comunicação, muitas vezes é necessário manter a consistência do estado entre vários componentes.Este modelo está sujeito a problemas e complica a lógica do programa. Vuex extrai o estado compartilhado dos componentes e o gerencia em um modo singleton global, para que qualquer componente possa obter e modificar o estado de maneira consistente. Os dados responsivos também podem garantir um fluxo unidirecional simples, tornando o código mais eficiente. Estruturado e de fácil manutenção. 3. Quando usar: Vuex não é necessário, ele pode gerenciar estados, mas também traz mais conceitos e frameworks. Se não planejamos desenvolver um grande aplicativo de página única ou não há uma grande quantidade de estado global para manter no aplicativo, não há necessidade de usar o Vuex. Um modo de armazenamento simples é suficiente. Caso contrário, a Vuex seria a escolha natural.
4. Uso: Vuex coloca o estado global no state
objeto, que em si é uma árvore de estados. O componente usa store
instâncias para state
acessar esses estados, depois usa mutation
métodos de suporte para modificar esses estados e só pode mutation
modificar o estado e chamá-lo no componente . commit
Envio de métodos mutation
; se houver operações assíncronas ou combinações lógicas complexas na aplicação, elas precisam ser escritas action
. Após a execução, se houver modificações de estado, elas ainda precisam ser enviadas mutation
e os componentes são dispatch
despachados action
. Finalmente, a modularização é usada para modules
organizar os submódulos divididos por meio de opções. Ao acessar o estado, você precisa prestar atenção ao adicionar o nome do submódulo. Se o submódulo tiver configurações, prefixos de namespace adicionais serão necessários ao namespace
enviar mutation
e despacho .action
Como resolver o problema de perda de estado do Vuex após a atualização da página?
Vuex salva apenas o estado na memória e ele será perdido após a atualização. Se quiser persistir, você precisa salvá-lo.
localStorage
É muito adequado, mutation
pode ser salvo ao mesmo tempo no envio localStorage
e store
o valor pode ser retirado como state
valor inicial.
Você também pode usar plug-ins de terceiros. É recomendado o uso de vuex-persist
plug-ins. É um plug-in para armazenamento persistente Vuex. Não requer acesso manual storage
, mas salva diretamente o estado em cookie
ou localStorage
.
Você entende o Vue SSR?
SSR
Ou 服务端渲染(Server Side Render)
seja, o trabalho de renderização de tags Vue em HTML no cliente é feito no servidor e, em seguida, o HTML é retornado diretamente ao cliente.
- Vantagens: Melhor SEO e a primeira tela carrega mais rápido.
- Desvantagens: As condições de desenvolvimento serão limitadas. A renderização do lado do servidor suporta apenas dois ganchos, beforeCreate e criado. Quando precisamos de algumas bibliotecas de extensão externas, é necessário um processamento especial. Os aplicativos de renderização do lado do servidor também precisam estar no ambiente de execução Node.js. . O servidor terá maiores requisitos de carga.
Quais métodos de otimização de desempenho você conhece sobre o Vue?
- As rotas são carregadas lentamente. Divida efetivamente o tamanho do aplicativo e carregue-o de forma assíncrona quando acessado.
keep-alive
Armazene a página em cache. Evite a criação duplicada de instâncias de componentes e mantenha o estado do componente em cache.v-for
Traversal evita o uso simultâneov-if
. Na verdade, já é um uso errado no Vue 3.- Otimização de desempenho de lista longa, lista virtual pode ser usada.
v-once
. Uso de dados que não muda maisv-once
.- O evento é destruído. Depois que o componente é destruído, as variáveis globais e os temporizadores são destruídos.
- As fotos são carregadas lentamente.
- Plug-ins de terceiros são introduzidos sob demanda.
- Divisão de subcomponentes. Componentes de estado mais pesados são adequados para divisão.
- Renderização do lado do servidor.
afinal
Preparamos um pacote de informações iniciais para todos. Contém 54 e-books relacionados ao front-end 2.57G, "Guia de entrevista de front-end (com respostas e análises)", tutoriais em vídeo sobre conhecimentos difíceis e importantes (conjunto completo).
Amigos necessitados podem clicar no cartão abaixo para recebê-lo e compartilhá-lo gratuitamente