Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Sugestão] Importação sem {} – Exportação Padrão - Uso do alias

Olá, boa noite.

Ao ler o conteúdo da atividade 03 Para saber mais: importando funcionalidades , não ficou claro para mim que o alias deve ser usado ao invocar a função importado.

Devido à dúvida, fiz vários testes modificando o arquivo "index.js" de

import { criarItemDaLista } from "./scripts/criarItemDaLista.js";
import verificarListaVazia from "./scripts/verificarListaVazia.js";

const listaDeCompras = document.getElementById("lista-de-compras");
const botaoAdicionar = document.getElementById("adicionar-item");

botaoAdicionar.addEventListener("click", (evento) => {
    evento.preventDefault();
    const itemDaLista = criarItemDaLista();
    listaDeCompras.appendChild(itemDaLista);
    verificarListaVazia(listaDeCompras);

})

verificarListaVazia(listaDeCompras);

para algo do tipo

import { criarItemDaLista } from "./scripts/criarItemDaLista.js";
import verificarListaVaziaTeste from "./scripts/verificarListaVazia.js"; //usando alias diferente

const listaDeCompras = document.getElementById("lista-de-compras");
const botaoAdicionar = document.getElementById("adicionar-item");

botaoAdicionar.addEventListener("click", (evento) => {
    evento.preventDefault();
    const itemDaLista = criarItemDaLista();
    listaDeCompras.appendChild(itemDaLista);
    verificarListaVazia(listaDeCompras); // mantendo o nome da função que está no modulo importado

})

verificarListaVazia(listaDeCompras);

e não funcionou.

Testei então invocando a função verificarListaVazia com o mesmo nome do alias e vi que funcionou, portanto é obrigatório usar o mesmo nome do alias, conforme abaixo

import { criarItemDaLista } from "./scripts/criarItemDaLista.js";
import verificarListaVaziaTeste from "./scripts/verificarListaVazia.js";

const listaDeCompras = document.getElementById("lista-de-compras");
const botaoAdicionar = document.getElementById("adicionar-item");

botaoAdicionar.addEventListener("click", (evento) => {
    evento.preventDefault();
    const itemDaLista = criarItemDaLista();
    listaDeCompras.appendChild(itemDaLista);
    verificarListaVaziaTeste(listaDeCompras);

})

verificarListaVaziaTeste(listaDeCompras);

Acredito que esse ponto poderia ser detalhado melhor.

Gostaria também de fazer dois questionamentos:

  1. Em qual circunstancias é útil usar um alias? Imagino que possa sê-lo quando o nome do objeto importado seria o mesmo de algum objeto já presente no modulo que importa.
  2. Caso meu entendimento do ponto 1) estiver correto, existe algum jeito de usar alias na Importação com {}?

Obrigado

1 resposta
solução!

Olá, Agostino. Tudo bem?

Sua análise está correta e a forma como você testou o código foi exatamente o que ajuda a entender melhor esse comportamento.

No caso da exportação padrão (default export), a ideia de que você pode usar “qualquer nome” na importação continua válida. O ponto é que esse nome escolhido passa a ser o único nome conhecido dentro do arquivo que está importando.

Por exemplo:

import verificarListaVaziaTeste from "./scripts/verificarListaVazia.js";

A partir desse momento, a função passa a se chamar verificarListaVaziaTeste nesse arquivo. O nome original não fica disponível ali. Por isso, ao tentar usar verificarListaVazia, o código não encontra a função. Quando você usa verificarListaVaziaTeste, funciona como esperado.

Então não é que exista uma obrigatoriedade de usar alias, e sim que o nome definido na importação é o que deve ser utilizado depois.

Sobre quando usar alias, seu entendimento está correto. Ele é útil principalmente para evitar conflitos de nomes ou para deixar o código mais claro dentro do contexto em que está sendo utilizado.

Também é possível usar alias nas importações com {}. Nesse caso, utiliza-se a palavra-chave as, como no exemplo:

import { criarItemDaLista as novoItem } from "./scripts/criarItemDaLista.js";

Assim você continua usando uma exportação nomeada, mas pode adaptar o nome no arquivo atual.

Conteúdo relacionado:

Bons estudos!

Sucesso

Imagem da comunidade