Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

166
Visualizações
Cargando dinámicamente SVG React Component

Intentando cargar archivos SVG de forma dinámica, pero aparece un error de tiempo de ejecución y no estoy seguro de cuál es el problema. ¿Alguien puede ayudar?

Componente:

 import React, { useEffect, useRef } from "react"; import { IIcon } from './IIcon'; import { DEFAULT_ASSET_ICON_FOLDER, } from '@/constants/default'; function Icon({name}: IIcon) { const ImportedIconRef = useRef(); useEffect(() => { const importIcon = async () => { try { ImportedIconRef.current = ( await import(`${DEFAULT_ASSET_ICON_FOLDER}/${name}.svg`) ).ReactComponent; } catch (err) { // @TODO - Log error somewhere } }; importIcon(); }, [name]); const SvgIcon = ImportedIconRef.current; return ( <SvgIcon /> ); } export default Icon;

Uso: solo quiero pasar una referencia basada en cadenas al nombre del archivo.

 <Icon name="DELETE" />

Error Este es el error que estoy recibiendo, referirme a que el tipo de elemento no es válido

 Unhandled Runtime Error Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports. Check the render method of `Icon`.
about 4 years ago · Santiago Gelvez
1 Respostas
Responde à pergunta

0

Está devolviendo un <SvgIcon /> nulo/indefinido mientras se carga el svg.

  1. Agregue una variable de estado de loading y actualícela en el bloque finally .
 const [, setLoading] = useState(false); useEffect(() => { setLoading(true); const importIcon = async () => { try { ImportedIconRef.current = ( await import(`./${DEFAULT_ASSET_ICON_FOLDER}/${name}.svg`) ).ReactComponent; } catch (err) { // @TODO - Log error somewhere // console.log(err); } finally { setLoading(false); } }; importIcon(); }, [name]);
  1. Agregar un cheque nulo
 if (SvgIcon) { return <SvgIcon />; } return null;

Editar práctico-kilby-3h7iwn

about 4 years ago · Santiago Gelvez Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda