Introdução
Neste projeto, você aprenderá como corrigir um bug no código vue-router 3.1.3 onde a renderização do componente falha ao criar um componente de link do roteador usando a v-slot API e fornecendo múltiplos elementos filhos.
👀 Pré-visualização

🎯 Tarefas
Neste projeto, você aprenderá:
- Como localizar e identificar o problema no código
vue-router 3.1.3 - Como corrigir o problema modificando o código no arquivo
link.js - Como reconstruir e lançar o projeto
vue-router 3.1.3corrigido - Como verificar o efeito corrigido testando a aplicação
🏆 Conquistas
Após concluir este projeto, você será capaz de:
- Solucionar problemas e corrigir problemas em uma biblioteca de terceiros
- Reconstruir e lançar um projeto após fazer alterações no código
- Testar e verificar a funcionalidade de um problema corrigido
Corrigir o Problema da API V-Slot no Vue-Router 3.1.3
Para começar, observe a estrutura de diretórios dos arquivos à esquerda, conforme segue:
├── vue-router-3.1.3
├── vue.js
└── index.html
Clique no botão Go Live no canto inferior direito do WebIDE para executar o projeto.
Em seguida, abra "Web 8080" no topo da VM e atualize-o manualmente, depois abra a opção "Console" no console do seu navegador para visualizar a página no seu navegador, conforme mostrado abaixo:

Nesta etapa, você corrigirá o problema no código vue-router 3.1.3 onde a renderização do componente falha ao criar um componente de link do roteador usando a v-slot API e fornecendo múltiplos elementos filhos.
- Abra o arquivo
vue-router-3.1.3/src/components/link.js. - Localize o seguinte bloco de código:
if (scopedSlot) {
if (scopedSlot.length === 1) {
return scopedSlot[0];
} else if (scopedSlot.length > 1 || !scopedSlot.length) {
if (process.env.NODE_ENV !== "production") {
warn(
false,
`RouterLink with to="${this.props.to}" is trying to use a scoped slot but it didn't provide exactly one child.`
);
}
return scopedSlot.length === 0 ? h() : h("span", {}, scopedSlot);
}
}
- Atualize o código da seguinte forma:
if (scopedSlot) {
if (scopedSlot.length === 1) {
return scopedSlot[0];
} else if (scopedSlot.length > 1 || !scopedSlot.length) {
if (process.env.NODE_ENV !== "production") {
warn(
false,
`RouterLink with to="${this.to}" is trying to use a scoped slot but it didn't provide exactly one child.`
);
}
return scopedSlot.length === 0 ? h() : h("span", {}, scopedSlot);
}
}
A principal alteração está na mensagem de aviso, onde this.props.to foi substituído por this.to.
Reconstruir e Testar o Vue-Router 3.1.3 Corrigido
Nesta etapa, você reconstruirá o projeto vue-router 3.1.3 e testará o efeito corrigido.
- Abra o diretório
vue-router-3.1.3no terminal. - Execute o comando
npm installpara instalar as dependências. Este processo pode levar algum tempo, por favor, seja paciente. (Se ficar preso por muito tempo, pressioneCtrl+Cpara terminar o processo e, em seguida, execute este comando novamente.) - Após todas as dependências terem sido instaladas com sucesso, execute o comando
npm run buildpara reconstruir e lançar o projeto. - Clique na opção "Web 8080" no topo da VM e atualize a página manualmente.
- Abra o console do navegador e verifique se o erro "TypeError: this.props is undefined" não é mais exibido.
- Verifique se a página agora está renderizando corretamente com o problema da
v-slot APIcorrigido.
A imagem do efeito após o problema ser corrigido é mostrada abaixo:

Resumo
Parabéns! Você concluiu este projeto. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.



