3
respostas

ERRO AO ENTRAR NA TELA DE PRODUTOR

ANTES DE CLICAR:

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeAPÓS CLICAR:

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeErro: 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.

3 respostas

Olá, Pedro! Tudo bem?

O erro que você mencionou é o seguinte:

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.

Esse tipo de erro é bastante comum ao trabalhar com componentes em React Native. A mensagem de erro sugere que o tipo de elemento esperado é uma string (para componentes internos) ou uma classe/função (para componentes compostos), mas o tipo recebido é undefined. Isso geralmente ocorre quando há algum problema com a importação ou exportação do componente.

Vamos analisar algumas possíveis causas desse erro e como corrigi-las.

  1. Verifique as importações: É possível que você tenha cometido um erro ao importar o componente na tela de produtor. Certifique-se de que a importação esteja correta, verificando o caminho do arquivo e o nome do componente. Um erro comum é misturar importações padrão e nomeadas. Certifique-se de usar a importação correta para o tipo de exportação que está sendo utilizado no arquivo.

    Por exemplo, se você está exportando o componente como padrão (export default MeuComponente) em seu arquivo MeuComponente.js, a importação correta seria:

    import MeuComponente from './MeuComponente';
    

    Caso você esteja exportando o componente de forma nomeada (export const MeuComponente = ...) em seu arquivo MeuComponente.js, a importação correta seria:

    import { MeuComponente } from './MeuComponente';
    

    Certifique-se de verificar se todas as importações estão corretas e correspondem aos nomes e caminhos corretos dos arquivos.

  2. Verifique se o componente está sendo exportado corretamente: É importante garantir que o componente em questão esteja sendo exportado corretamente em seu arquivo. Verifique se você está utilizando a palavra-chave export antes da definição do componente. Se você estiver usando a exportação padrão, certifique-se de que o componente esteja sendo exportado corretamente no final do arquivo.

    Por exemplo, se você estiver exportando o componente como padrão, verifique se seu arquivo está assim:

    // MeuComponente.js
    import React from 'react';
    
    const MeuComponente = () => {
      // Conteúdo do componente
    };
    
    export default MeuComponente;
    

    Caso você esteja usando exportação nomeada, verifique se o componente está sendo exportado corretamente:

    // MeuComponente.js
    import React from 'react';
    
    export const MeuComponente = () => {
      // Conteúdo do componente
    };
    

Geralmente essas importações que causam esse tipo de erro, mas podem ter outros motivos. Caso esses passos não resolvam o problema, poderia mandar os códigos do seu projeto e colar os erros também? Assim posso ajudar de maneira mais rápida, fico no aguardo!!

Bons estudos!!

Olá, boa noite! Então o erro é na importação do Topo mesmo, por que sempre quando adiciono ele na tela retorna este erro e somente.

Segue link do código no github: https://github.com/Pedro-Louzada/praticando-react-js/tree/main/navegandoEntreTelas

Desde já, agradeço a ajuda!

Fala, Pedro. Dei uma olhada por aqui e o que está causando esse erro é o Gradiente e o voltarSVG da arquivo Topo.js, tanto que se você comentar a linha desses elementos o código vai funcionar normalmente:

import React from 'react';
import { Image, StyleSheet, Dimensions, TouchableOpacity } from 'react-native';

import Texto from './Texto';

//import Gradiente from '../assets/gradiente.svg';
import topo from '../assets/topo.png';
//import VoltarSVG from '../assets/voltar.svg';

const largura = Dimensions.get('screen').width;
const ALTURA_PADRAO = 270;

export default function Topo({ titulo, imagem = topo, altura = ALTURA_PADRAO }) {
  const estilos = funcaoEstilos(altura);
  return <>
    <Image source={imagem} style={estilos.topo} />
    {/* <Gradiente width={largura} height={130 / 360 * largura} style={estilos.gradiente}/> */}
    <Texto style={estilos.titulo}>{titulo}</Texto>
    <TouchableOpacity
      onPress={() => {}}
      style={estilos.botaoVoltar}>
      {/* <VoltarSVG color="white" style={estilos.voltar} /> */}
    </TouchableOpacity>
  </>;
}

const funcaoEstilos = (altura) => StyleSheet.create({
  topo: {
    width: '100%',
    height: altura,
  },
  gradiente: {
    position: 'absolute',
  },
  titulo: {
    width: '100%',
    position: 'absolute',
    textAlign: 'center',
    fontSize: 16,
    lineHeight: 26,
    color: 'white',
    fontWeight: 'bold',
    padding: 16,
  },
  botaoVoltar: {
    position: 'absolute',
    padding: 17,
  },
  voltar: {
    width: 24,
    height: 24,
  },
});

Importar a imagem diretamente e tentar utilizá-la como um componente não vai funcionar no react native, por isso está dando esse erro de tipos. O que você pode fazer é importar o caminho para a imagem e adicionar ele em um Image do react native, dessa forma acredito que vai funcioanr. Além disso, você pode criar estilos específicos para cada imagem e passar por parâmetro.

Eu espero que tenha ajudado e quaquer coisa estou por aqui!

Bons estudos!