1
resposta

Erro ao adicionar o componente Topo do produtor

quando tentei adicionar o Componente Topo do produtor, me deparei com o seguinte erro:

Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: number

depois de horas, descobri que o problema estava nas chamadas dos arquivos de imagem .svg na chamada ->


<Gradiente width={ largura } height={ (130 / 360 * largura) } style={estilos.gradiente} />  `

e ->


<VoltarSVG color="white" style={estilos.voltar} />`

presente na função ->

export default function Topo({ titulo, imagem = topo, altura = ALTURA_PADRAO }) {
  const estilos = funcaoEstilos(altura);
  console.log("\"" + largura + "\"")
  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>
  </>

}

pesquisei na internet e vi que teria que instalar a biblioteca chamada "react native svg" -> https://www.npmjs.com/package/react-native-svg "npm install react-native-svg"

e depois a biblioteca "npm install --save-dev react-native-svg-transformer" -> https://www.npmjs.com/package/react-native-svg-transformer

depois deve adicionar algumas configurações:

quando o typescript for utilizado deve ser criado um arquivo chamado declarations.d.ts na raiz do projeto e colar o codigo do passo 3 da documentação do svg transformer // svg transformer para typescript-------------------------------

declare module "*.svg" {
  import React from 'react';
  import { SvgProps } from "react-native-svg";
  const content: React.FC<SvgProps>;
  export default content;
}

//-----------------------------------------------------------------------------

para javascript deve ser adicionado no arquivo metro.config.js o codigo do passo 3 da documentação do svg transformer For React Native v0.59 or newer

// svg transformer para javascript-------------------------------


const { getDefaultConfig } = require("metro-config");

module.exports = (async () => {
  const {
    resolver: { sourceExts, assetExts }
  } = await getDefaultConfig();
  return {
    transformer: {
      babelTransformerPath: require.resolve("react-native-svg-transformer")
    },
    resolver: {
      assetExts: assetExts.filter(ext => ext !== "svg"),
      sourceExts: [...sourceExts, "svg"]
    }
  };
})();

// -----------------------------------------------------------------------------

depois de fazer essas alterações o problema foi resolvido, espero que seja útil

1 resposta

Olá, Renê!

Entendo que você estava enfrentando um erro ao adicionar o componente Topo do produtor no seu projeto React Native. Esse erro ocorreu devido a chamadas de arquivos de imagem .svg.

A solução que você encontrou, de instalar a biblioteca "react-native-svg" e "react-native-svg-transformer", foi correta. Essas bibliotecas são necessárias para lidar com arquivos .svg no React Native.

Além disso, você também adicionou algumas configurações no projeto, como a criação do arquivo "declarations.d.ts" e a adição de código no arquivo "metro.config.js". Essas configurações são importantes para garantir o correto funcionamento do SVG no seu projeto.

Fico feliz em saber que você conseguiu resolver o problema com essas alterações. Espero que essa solução seja útil para outros estudantes que possam enfrentar o mesmo erro.

Se tiver mais alguma dúvida, estou à disposição! Espero ter ajudado e bons estudos!