<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ednilson Cardoso</title>
    <description>The latest articles on DEV Community by Ednilson Cardoso (@ednilsoncs).</description>
    <link>https://dev.to/ednilsoncs</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F316280%2F347aa436-8e0d-4434-a24d-27d2979798cb.jpeg</url>
      <title>DEV Community: Ednilson Cardoso</title>
      <link>https://dev.to/ednilsoncs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ednilsoncs"/>
    <language>en</language>
    <item>
      <title>Como fazer um menu lateral customizado usando React native e React navigation 5</title>
      <dc:creator>Ednilson Cardoso</dc:creator>
      <pubDate>Sat, 16 Jan 2021 13:12:49 +0000</pubDate>
      <link>https://dev.to/ednilsoncs/como-fazer-um-menu-lateral-customizado-usando-react-native-e-react-navigation-5-19b</link>
      <guid>https://dev.to/ednilsoncs/como-fazer-um-menu-lateral-customizado-usando-react-native-e-react-navigation-5-19b</guid>
      <description>&lt;p&gt;Há diversas formas de navegar por um aplicativo, o menu lateral é uma forma bastante conhecida, sendo um dos tipos mais encontrados em ferramentas mobile. Trabalhando como desenvolvedor não foi uma grande surpresa quando foi solicitado o desenvolvimento de tal mecanismo de navegação.&lt;/p&gt;

&lt;p&gt;Porém, uma coisa que me surpreendeu foi a falta de informação sobre o tema na internet, principalmente sobre a nova versão do react navigation. Acabei passando horas pesquisando e filtrando informações para conseguir montar um mecanismo igual solicitado.&lt;/p&gt;

&lt;p&gt;Para suprir a necessidade era necessário encontrar uma forma de deixar um item do menu com o estado de ativo, assim como  poder adicionar mais componentes visuais de forma a deixar a interface mais amigável.&lt;/p&gt;

&lt;p&gt;Desta forma, resolvi escrever este artigo para mostrar a abordagem que foi utilizada para solucionar o problema, sendo aqui um compilado de todas as informações encontradas e usadas para desenvolver a solução.&lt;/p&gt;

&lt;h2&gt;
  
  
  Iniciando o projeto e dependências usadas
&lt;/h2&gt;

&lt;p&gt;Como o react native e suas dependências estão sempre evoluindo e mudando de versão, irei descrever como fiz as instalações e informar as versões instaladas no momento que este artigo foi escrito.&lt;/p&gt;

&lt;p&gt;Primeiro, vamos usar o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npx react-native init nome-do-seu-projeto --template react-native-template-typescript&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Com esse comando você está iniciado o projeto usando o CI do react native assim como o template de typescript no projeto.&lt;/p&gt;

&lt;p&gt;O segundo passo é instalar o styled component&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;yarn add styled-components&lt;br&gt;
yarn add @types/styled-components-react-native -D&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;O terceiro passo é instalar as dependências do react navigation:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;yarn add @react-navigation/native&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;E:&lt;/p&gt;

&lt;p&gt;yarn add react-native-reanimated react-native-gesture-handler react-native-screens react-native-safe-area-context @react-native-community/masked-view&lt;/p&gt;

&lt;p&gt;Em seguida:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;yarn add @react-navigation/drawer&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Por último, como vou usar Icons na aplicação:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;yarn add react-native-vector-icons&lt;br&gt;
yarn add @types/react-native-vector-icons -D&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Com isso, vamos ter todas as dependências para a execução do projeto descrito neste artigo.&lt;/p&gt;

&lt;p&gt;Como prometido, a seguir tem todas as versões instaladas no projeto:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h2&gt;
  
  
  Desenvolvimento da aplicação
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Instalação do React Native Vector Icon
&lt;/h3&gt;

&lt;p&gt;Para android é necessário apenas abrir o arquivo android/app/build.gradle e adicionar a seguinte linha no final:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;apply from: "../../node_modules/react-native-vector-icons/fonts.gradle"&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Já na plataforma IOS, abra o arquivo ios/NOMEDOPROJETO/info.plist e adicione a seguinte chave:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;key&amp;gt;UIAppFonts&amp;lt;/key&amp;gt;
 &amp;lt;array&amp;gt;
 &amp;lt;string&amp;gt;AntDesign.ttf&amp;lt;/string&amp;gt;
 &amp;lt;string&amp;gt;Entypo.ttf&amp;lt;/string&amp;gt;
 &amp;lt;string&amp;gt;EvilIcons.ttf&amp;lt;/string&amp;gt;
 &amp;lt;string&amp;gt;Feather.ttf&amp;lt;/string&amp;gt;
 &amp;lt;string&amp;gt;FontAwesome.ttf&amp;lt;/string&amp;gt;
 &amp;lt;string&amp;gt;FontAwesome5_Brands.ttf&amp;lt;/string&amp;gt;
 &amp;lt;string&amp;gt;FontAwesome5_Regular.ttf&amp;lt;/string&amp;gt;
 &amp;lt;string&amp;gt;FontAwesome5_Solid.ttf&amp;lt;/string&amp;gt;
 &amp;lt;string&amp;gt;Foundation.ttf&amp;lt;/string&amp;gt;
 &amp;lt;string&amp;gt;Ionicons.ttf&amp;lt;/string&amp;gt;
 &amp;lt;string&amp;gt;MaterialIcons.ttf&amp;lt;/string&amp;gt;
 &amp;lt;string&amp;gt;MaterialCommunityIcons.ttf&amp;lt;/string&amp;gt;
 &amp;lt;string&amp;gt;SimpleLineIcons.ttf&amp;lt;/string&amp;gt;
 &amp;lt;string&amp;gt;Octicons.ttf&amp;lt;/string&amp;gt;
 &amp;lt;string&amp;gt;Zocial.ttf&amp;lt;/string&amp;gt;
 &amp;lt;/array&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Estrutura do projeto
&lt;/h3&gt;

&lt;p&gt;Primeiramente vamos criar uma pasta chamada src na raiz do projeto e criar um arquivo index com o seguinte conteúdo:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;Como podemos perceber dentro deste arquivo foi importado as rotas da aplicação criada na pasta "routes", com arquivo principal com o seguinte conteúdo:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Aqui neste arquivo podemos tirar algumas informações interessante como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Declaramos duas rotas para as telas que serão criadas, a tela Home e a tela About;&lt;/li&gt;
&lt;li&gt;Passamos o componente do menu customizado(Drawer Content) para o Drawer.navigator através da propriedade drawerContent.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Já o componente DrawerContent é composto pelo seguinte código:&lt;/p&gt;

&lt;p&gt;Arquivo Principal:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Arquivo de estilos:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Neste componente podemos tirar as seguintes informações principais:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;As propriedades passadas para o componente no arquivo de rotas é recebidas no componente com a tipagem "DrawerContentComponentProps" importado do @react-navigation/drawer.&lt;/li&gt;
&lt;li&gt;Os itens que serão exibidos no menu são declarados através de um array com o nome da rota, icon e titulo a serem exibidos na lateral do aplicativo.
O componente final que será exibido na lateral se chama MenuItem e que é gerado através do array de opções declarado.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O Componente MenuItem é composto pelo seguinte código:&lt;/p&gt;

&lt;p&gt;Arquivo principal:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Arquivo de estilos:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Neste componente também tiramos algumas informações importantes, pois usamos de alguns conceitos não muito conhecido do react navigation, segue a explicação:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A constante ActiveRouteName é recuperada através do valor do routeName que é passado pelo DrawerNavigation através das props dos componentes, sendo possível pesquisar o index correspondente na pilha de telas e pegar o nome exato da rota atual.&lt;/li&gt;
&lt;li&gt;Já a constante isActive faz uma simples comparação usando o valor da rota que foi passado como parâmetro para o componente com a ActiveRouteName encontrado.&lt;/li&gt;
&lt;li&gt;A função navigationToScreen faz uma validação verificando se a função de onPress foi enviada, navegando para a tela correspondente.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para finalizar, vou mostrar como podemos abrir o menu lateral na tela e visualizar como vai ficar na aplicação.&lt;/p&gt;

&lt;p&gt;Para isso eu criei duas telas e um componente de header, como as telas são praticamente iguais vou deixar apenas o código da tela Home e do componente Header:&lt;/p&gt;

&lt;p&gt;Arquivo Principal da tela Home:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Arquivo de estilos da tela Home:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;No código da tela de home também temos mais algumas informações importantes sobre o menu lateral:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A primeira é que para abrir, precisa usar o hook de navegação useNavigation().&lt;/li&gt;
&lt;li&gt;Se você não for adepto ao typescript poderá perceber algo estranho, que no caso é a tipagem das rotas que precisa ser passada como parâmetro para poder ter acesso às propriedades do DrawerNavigation.Header.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Por fim, o último componente:&lt;/p&gt;

&lt;p&gt;Arquivo Principal do componente Header:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Arquivo de estilos do componente Header:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h2&gt;
  
  
  Interface final
&lt;/h2&gt;

&lt;p&gt;Abaixo, fica o exemplo de como o app deve ficar com o código compartilhado:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--N4hHEytY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/o0aeom70ooryvcsp4fj6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--N4hHEytY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/o0aeom70ooryvcsp4fj6.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--b4X8qmQm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dqkn1fx5c14fgzw8zorz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--b4X8qmQm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dqkn1fx5c14fgzw8zorz.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8AN3UD0O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0bs2sokadm0zojoru8iy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8AN3UD0O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0bs2sokadm0zojoru8iy.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Slw8E7m8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/co1yzuatxdl1mkt0n8z1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Slw8E7m8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/co1yzuatxdl1mkt0n8z1.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Esse artigo teve como objetivo mostrar como criar um menu lateral usando o react navigation v5. Espero que eu tenha conseguindo mostrar de uma forma fácil, detalhada e objetiva como implementar essa funcionalidade tão pedida pelos designer.&lt;/p&gt;

&lt;p&gt;Sinta-se à vontade para modificar o código e fazer as melhorias necessárias para sua aplicação.&lt;/p&gt;

&lt;p&gt;E por fim, se achou esse artigo útil compartilhe nas redes sociais e para aquele seu amigo que está se aventurando no mundo do desenvolvimento mobile ou até mesmo para aqueles que não estão.&lt;/p&gt;

&lt;h2&gt;
  
  
  Referências
&lt;/h2&gt;

&lt;p&gt;Foto da capa by Joshua Aragon on Unsplash&lt;/p&gt;

&lt;p&gt;&lt;a href="https://reactnative.dev"&gt;&lt;code&gt;React Native Docs&lt;/code&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://reactnavigation.org/"&gt;&lt;code&gt;React Navigation V5 Docs&lt;/code&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://styled-components.com/docs"&gt;&lt;code&gt;Styled Components Docs&lt;/code&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.typescriptlang.org/docs/handbook/react.html"&gt;&lt;code&gt;React Typescript Docs&lt;/code&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/oblador/react-native-vector-icons"&gt;&lt;code&gt;React native Vector Icons Docs&lt;/code&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.typescriptlang.org/"&gt;&lt;code&gt;Typescript Docs&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>typescript</category>
      <category>sidemenu</category>
      <category>react</category>
    </item>
    <item>
      <title>Uma introdução a React Native + Typescript + Styled Component</title>
      <dc:creator>Ednilson Cardoso</dc:creator>
      <pubDate>Thu, 25 Jun 2020 22:01:09 +0000</pubDate>
      <link>https://dev.to/ednilsoncs/uma-introducao-a-react-native-typescript-styled-component-4kpd</link>
      <guid>https://dev.to/ednilsoncs/uma-introducao-a-react-native-typescript-styled-component-4kpd</guid>
      <description>&lt;p&gt;Há um bom tempo venho estudando React + Typescript. Já que considero o Typescript uma forma de minimizar os bugs que encontramos nas Aplicações, além de facilitar a manutenção e desenvolvimento do software.&lt;/p&gt;

&lt;p&gt;Durante o desenvolvimento de uma aplicação usada para estudar essa stack eu resolvi utilizar a biblioteca Styled Component para ajudar na organização e construção do código.&lt;/p&gt;

&lt;p&gt;Foi durante o desenvolvimento dessa aplicação que surgiu uma dúvida crucial para continuar o desenvolvimento "Como eu devo usar essa ferramenta?", Visto que o mesmo código que eu utilizava no javascript agora não estava funcionando mais no Typescript.&lt;/p&gt;

&lt;p&gt;Sendo assim, depois de pesquisar bastante e conseguir implementar minha aplicação eu resolvi escrever esse artigo para os iniciantes que tiveram o mesmo problema que eu no inicio de seus estudos com essa stack.&lt;/p&gt;

&lt;p&gt;Desta forma, neste artigo eu vou mostrar como criar alguns componentes para serem usados na sua aplicação usando React native + Styled Component + Typescript. Não pretendo me aprofundar em todos os temas para não prolongar muito.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que foi escolhida essa Stack?
&lt;/h2&gt;

&lt;p&gt;React Native foi escolhido por ser uma plataforma versátil que pode ser usada para desenvolver tanto para Android como para IOS de forma performática. Um outro ponto muito importante é que podemos utilizar boa parte do conhecimento aprendido também no React.js,  já que essas duas plataformas se aproximam muito em questão de semântica de código.&lt;/p&gt;

&lt;p&gt;A escolha do Styled Component é por causa que melhora a  legibilidade  e manutenção do código escrito, uma vez que permite que eu adicione estilização diretamente aos componentes da plataforma, tanto os nativos como os customizados.&lt;/p&gt;

&lt;h2&gt;
  
  
  Iniciando o desenvolvimento
&lt;/h2&gt;

&lt;p&gt;Neste artigo não iremos fazer uma aplicação totalmente funcional, irei direto no que interessa que é mostrar como codificar os componentes usando as ferramentas mencionadas.&lt;/p&gt;

&lt;p&gt;Primeiro passo para começarmos o desenvolvimento é iniciar o projeto usando o template de "react-native-template-typescript', caso  surja alguma dúvida sobre esse processo consulte a documentação &lt;a href="https://reactnative.dev/docs/typescript"&gt;aqui&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo npx react-native init myproject  - template react-native-template-typescript
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;O segundo passo que eu sempre faço é remover os arquivos desnecessários e criar uma outra estrutura inicial com a configuração das rotas e das pastas. recomendo consultar o repositório do github.&lt;/p&gt;

&lt;p&gt;Para prosseguir com o artigo você vai precisar adicionar as seguinte dependência em seu projeto:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn add styled-components
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;e também vai precisar adicionar a tipagem de forma independente:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn add @types/styled-components-react-native
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Button
&lt;/h3&gt;

&lt;p&gt;O primeiro componente que vamos construir é um Custom Button para fazer ele vamos precisar de um TouchableOpacity, View e de um Text.&lt;/p&gt;

&lt;p&gt;No arquivo de index vamos fazer a estrutura do componente. Para isso vamos definir uma interface que  estende as propriedades do TouchableOpacity e adiciona mais três propriedades: isDisable (Opcional), color(obrigatória) e children (obrigatória).&lt;/p&gt;

&lt;p&gt;A seguir podemos ver o código final:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;No arquivo de estilos vamos definir os seguintes componentes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Container: Ele é apenas uma View estilizado então não precisamos passar as propriedades que ele recebe.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Touchable: Nesse componente eu utilizado algumas propriedades customizadas então precisamos definir uma interface para esse componente.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Text: Também vamos precisar adicionar uma interface, porquê recebemos alguns propriedades customizadas.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Você pode conferir o código final a seguir:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h3&gt;
  
  
  TextInput
&lt;/h3&gt;

&lt;p&gt;Este Textinput é um pouco mais complexo. ele foi construindo usando outros componentes também feito usando styled, como já expliquei no componente anterior.&lt;/p&gt;

&lt;p&gt;Uma observação que podemos pegar deste componente é que não precisamos criar uma nova interface para as propriedades, já que o componente não está recebendo nenhuma nova propriedade, então podemos usar diretamente o TextInputProps.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Já no caso dos estilos vamos precisar adicionar uma nova interface, porquê a cor do label depende do estado do componente total, como podemos ver a seguir:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h2&gt;
  
  
  Observações
&lt;/h2&gt;

&lt;p&gt;Alguns pontos precisamos destacar neste artigo para que você não tenha problemas é o seguinte:&lt;/p&gt;

&lt;p&gt;Algumas bibliotecas não vem com a tipagem por padrão junto com a biblioteca principal então precisamos instalar ela de forma separada usando a dependência @types/styled-components-react-native é preciso tomar cuidado para não cair nesse erro.&lt;/p&gt;

&lt;p&gt;O segundo ponto é que sempre que você precisar usar uma propriedade customizada para algum componente estilizado você vai precisar usar alguma tipagem importada da biblioteca mencionada no paragrafo anterior. &lt;/p&gt;

&lt;p&gt;Um exemplo disto é o botão que construímos a cima que precisou usar o TouchableOpacityProps para que na hora que o desenvolvedor precise usar em uma tela ele consiga ter acesso a todas as propriedades disponível nativamente + as Types que você configurou.&lt;/p&gt;

&lt;p&gt;E por fim uma outra coisa bastante importante é definir os retornos das funções de acordo com o componente que você está usando como fizemos em todos os componentes customizados anteriormente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Com esse artigo espero que você tenha conseguido tirar aquela dúvida que estava te impedindo de prosseguir no desenvolvimento da sua aplicação&lt;br&gt;
Se surgiu alguma dúvida ou viu algum erro por favor entre em contato comigo através das minhas redes sociais:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/devnilson"&gt;Twitter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/ednilsoncardosodossantos/"&gt;Linkedin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Refêrencia:&lt;br&gt;
&lt;a href="https://styled-components.com/docs"&gt;https://styled-components.com/docs&lt;/a&gt;&lt;br&gt;
&lt;a href="https://reactnative.dev/docs/typescript"&gt;https://reactnative.dev/docs/typescript&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.typescriptlang.org/docs/home.html"&gt;https://www.typescriptlang.org/docs/home.html&lt;/a&gt;&lt;br&gt;
&lt;a href="https://blog.rocketseat.com.br/typescript-vantagens-mitos-conceitos/"&gt;https://blog.rocketseat.com.br/typescript-vantagens-mitos-conceitos/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Créditos da imagem:&lt;br&gt;
&lt;span&gt;Photo by &lt;a href="https://unsplash.com/@ffstop?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Fotis Fotopoulos&lt;/a&gt; on &lt;a href="/s/photos/programming?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>reactnative</category>
      <category>typescript</category>
      <category>mobile</category>
    </item>
  </channel>
</rss>
