<?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: Andres dos Santos</title>
    <description>The latest articles on DEV Community by Andres dos Santos (@andresdosantos).</description>
    <link>https://dev.to/andresdosantos</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%2F482278%2F0365a0b9-779c-472f-8f5f-2e3395497de4.jpeg</url>
      <title>DEV Community: Andres dos Santos</title>
      <link>https://dev.to/andresdosantos</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/andresdosantos"/>
    <language>en</language>
    <item>
      <title>Como colocar um projeto no Github.</title>
      <dc:creator>Andres dos Santos</dc:creator>
      <pubDate>Mon, 02 Nov 2020 17:45:24 +0000</pubDate>
      <link>https://dev.to/andresdosantos/como-colocar-um-projeto-no-github-5c7k</link>
      <guid>https://dev.to/andresdosantos/como-colocar-um-projeto-no-github-5c7k</guid>
      <description>&lt;p&gt;Eaí pessoal, vocês já sabem como colocar seu projeto no Github? Se não sabe não tem problema, vamos resolver isso juntos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Você já tem uma conta?
&lt;/h2&gt;

&lt;p&gt;Antes de tudo, você vai precisar ter uma conta no Github, para isso basta acessar &lt;a href="'https://Github.com'"&gt;aqui&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Vá em &lt;strong&gt;SignUp&lt;/strong&gt; e crie seu perfil.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agora, crie um repositório.
&lt;/h2&gt;

&lt;p&gt;Um repositório é um pedacinho da nuvem do Github, é ele que vai guardar seu código e ele pode ser público &lt;code&gt;public&lt;/code&gt; ou privado &lt;code&gt;private&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Para criar um repositório vá até o ícone de &lt;code&gt;+&lt;/code&gt; e clique em &lt;code&gt;new repository&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Agora ele vai te pedir um nome e perguntar se é público ou privado.&lt;/p&gt;

&lt;p&gt;Depois de criado ele vai te dar algumas instruções sobre como fazer o push para o Github, mas se você é novo no site confesso que vai ficar um pouco confuso, bom, pelo menos eu fiquei 🤔.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vamos ao terminal
&lt;/h2&gt;

&lt;p&gt;Beeleza, vou considerar que você já tenha um projeto pronto. Com isso, abra o seu terminal na página que está seu App e digite.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;git init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Caso não tenha o &lt;strong&gt;git&lt;/strong&gt; instalado verifique &lt;a href="'https://gitscm.com/downloads'"&gt;aqui&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Agora, se você estiver no VSCode seus arquivos vão ficar todos na cor verde e vai ter um ponto ao lado dele.&lt;/p&gt;

&lt;p&gt;Aqui é sempre bom lembrar de usar o &lt;code&gt;.gitignore&lt;/code&gt; na &lt;strong&gt;raíz do projeto&lt;/strong&gt;, pois ele vai evitar que alguns arquivos seus vá para o Cloud do Github, então alguns arquivos de chave, senhas, ou o próprio &lt;code&gt;node_modules&lt;/code&gt; que ocupa muito espaço e não é necessário.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//.gitignore&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;/node_modules&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Feito isso, voltaremos ao terminal. Mas agora iremos &lt;strong&gt;adicionar os arquivos&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui eu adicionei todos os arquivos inicializados no git, menos os do .gitignore é claro.&lt;/p&gt;

&lt;p&gt;Depois de adicionado todos os arquivos, temos que comentar esse ponto na história do nosso projeto, isso tem o nome de &lt;strong&gt;commit&lt;/strong&gt;, e para fazer isso é simples. Então.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s1"&gt;'o comentário que eu quiser'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lembrando que é importante fazer um bom comentário aqui para você saber o que foi alterado no dia-a-dia do projeto.&lt;/p&gt;

&lt;p&gt;Agora, vamos &lt;strong&gt;mudar a branch&lt;/strong&gt; principal, branch é a linha que seu projeto está seguindo, por padrão o Github usa a &lt;code&gt;master&lt;/code&gt;, mas a Microsoft alterou a pouco tempo para &lt;code&gt;main&lt;/code&gt;, não sei porque mas...escolha da Microsoft né 🤷‍♂️&lt;/p&gt;

&lt;p&gt;Então...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;git branch &lt;span class="nt"&gt;-M&lt;/span&gt; main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Estamos quase lá, lembra que você criou um repositório? Então, nele tem uma linha dizendo algo como &lt;code&gt;git remote...&lt;/code&gt;, isso vai &lt;strong&gt;adicionar seu código ao repositório&lt;/strong&gt; que você fez, de forma remota.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;git remote add origin https://github.com/&amp;lt;seu-nome-no-github&amp;gt;/&amp;lt;nome-do-seu-repositório&amp;gt;.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Uffaa...adicionado!&lt;/p&gt;

&lt;h2&gt;
  
  
  Mas ainda não acabamos
&lt;/h2&gt;

&lt;p&gt;O último processo é bem legal, é só fazer o &lt;strong&gt;push&lt;/strong&gt; do seu projeto, o push é para empurrar seu código para as nuvem do Github, então...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lembrando que deve ser jogado para a ramificação principal do seu projeto. Nesse caso é a &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Bom pessoal é isso, espero ter ajudado, principalmente a quem nunca criou um repositório no Github 😁. Vaaaaleu!&lt;/p&gt;

&lt;p&gt;Opaa, espera um pouco, me segue lá: &lt;a href="'https://github.com/AndresdoSantos'"&gt;Andres&lt;/a&gt;&lt;/p&gt;

</description>
      <category>github</category>
    </item>
    <item>
      <title>Introdução ao GraphQL.</title>
      <dc:creator>Andres dos Santos</dc:creator>
      <pubDate>Sat, 31 Oct 2020 21:37:31 +0000</pubDate>
      <link>https://dev.to/andresdosantos/introducao-ao-graphql-heb</link>
      <guid>https://dev.to/andresdosantos/introducao-ao-graphql-heb</guid>
      <description>&lt;h1&gt;
  
  
  Introdução ao GraphQL
&lt;/h1&gt;

&lt;p&gt;Vamos trabalhar todos os dados do nosso produto por aqui, vamos usar ele como base.&lt;br&gt;
&lt;em&gt;"GraphQL é uma linguagem de consulta de dados desenvolvida e usada pelo Facebook desde 2012."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Pensa na timeline do Facebook, ele precisava pegar nome, URL, foto, conteúdo da postagem, ou seja, todas as informações daquele post, sendo de comentários, aí dentro dos comentários precisava pegar as informações dos usuários de dentro daquele post também, ou seja, muitas e muitas informações, e isso só no quadrado um único post, consequentemente isso ficcava muito pesado e para quase todos os usuários demorava muito, além de ser muito custoso para o servidor ter que ficar batendo em várias rotas. Foi por isso que eles desenvolveram o GraphQL.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;REST API&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Client(celular | computador) - HTTP request -&amp;gt; Server &lt;br&gt;
Client(celular | computador) &amp;lt;- JSON - Server &lt;/p&gt;

&lt;p&gt;A cada rota nova a API era atualizada, ou seja, o fluxo era refeito.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Problemas na REST API&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dificuldades para evoluir a REST API - para criar novas coisas nós tinhamos que criar elas e deixar funcionando a que já estava lá, aí era dividido, a rota antiga se transformava em 'v1' e a nova em 'v2', por exemplo.&lt;/li&gt;
&lt;li&gt;Entrega de dados nem sempre necessários, quando a requisição é feita ele envia um monte de coisas, caso seja grande o JSON.&lt;/li&gt;
&lt;li&gt;Aumento no tamanho da requisição, as rotas eram altamente acopladas, ou seja para pegar apenas alguns dados dos usuários nós tinhamos que criar outra rota para aquele tipo de serviço.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;GraphQL&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Preparando um schema&lt;/em&gt; com todos os dados.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;bio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;avatarURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;createdAt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;DateTime&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;followers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;FollowersConnection&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;FollowersConnection&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;edges&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;UserEdge&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="nl"&gt;nodes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="nl"&gt;totalCount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Int&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mas eu posso passar apenas os dados que eu quero.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;  &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;login&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Andres doSantos&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;followers&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;totalCount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ou seja, de um schema enorme, eu pego apenas um pequeno pedaço. E dele eu recebo apenas isso:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"user"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Andres doSantos"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Rio de Janeiro"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"followers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"totalCount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3957&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Temos também as &lt;code&gt;mutations&lt;/code&gt; para criação dos dados.&lt;br&gt;
&lt;code&gt;subscriptions&lt;/code&gt; que é uma outra forma de assistir as mudanças dos dados. &lt;br&gt;
E vários outros detalhes dos GraphQL.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;vantagens&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Permite uma constante evolução - é apenas uma rota, não é necessários 'v1', 'v2', ...&lt;/li&gt;
&lt;li&gt;Entrega seomente dos dados requisitados(tamanho menor e mais rápido), ou seja, o servidor responde mais rápido e o cliente baixa mais rápido.&lt;/li&gt;
&lt;li&gt;Rota úncia, dados altamente desacoplados, eu passo, na criação da rota, tudo o que eu quero e ele me trás tudo o que eu preciso.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No GraphQL a URL é: &lt;a href="https://graphql.github.com/graphql/proxy"&gt;https://graphql.github.com/graphql/proxy&lt;/a&gt;, as informações que eu quero passar vem no &lt;em&gt;payload&lt;/em&gt;, então se eu fizer uma query requisitando nome, o nome vem no &lt;em&gt;payload&lt;/em&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  GraphQL Clients
&lt;/h1&gt;

&lt;p&gt;São responsáveis por criar camadas de abstração para realizar queries/mutations, sistemas de cache, validações e otimizações.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fetching Client&lt;/strong&gt; é o mais simples, faz a chamada, recebe os dados e é isso aí, mais nada. Simples assim!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Caching Clients&lt;/strong&gt; são mais robustos, pegam os dados, transformam, colocam em camadas de caches e assim nós não temos que ficar batendo todas as vezes na API se agente tiver todos os valores ali, eles tem também máquinas de estado, então nós conseguimos ter uma espécie de Redux dentro dele.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quais os clients mais conhecidos/utilizados?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FetchQL&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;vantagens&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;É bem leve&lt;/li&gt;
&lt;li&gt;API simplificada&lt;/li&gt;
&lt;li&gt;Escrito com ES2015 e modules.&lt;/li&gt;
&lt;li&gt;Isomórfico, ou seja, funciona no Node.js e no browser.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;desvantagens&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Não possui sistema de cache.&lt;/li&gt;
&lt;li&gt;Não possui tratamento de dados e validações.&lt;/li&gt;
&lt;li&gt;Não tem contexto de estado.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;GraphQL request&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;vantagens&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simples e leve&lt;/li&gt;
&lt;li&gt;Baseado em promises, ou seja, trabalha com async/await.&lt;/li&gt;
&lt;li&gt;Suporte ao TypeScript.&lt;/li&gt;
&lt;li&gt;Isomórfico, ou seja, funciona no Node.js e no browser.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;desvantagens&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Não possui sistema de cache.&lt;/li&gt;
&lt;li&gt;Não possui tratamento de dados e validações.&lt;/li&gt;
&lt;li&gt;Não tem contexto de estado.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;uRQL&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;vantagens&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bastante leve e focado em performance.&lt;/li&gt;
&lt;li&gt;Altamente extensível, podemos acomplar mais coisas e deixar ele mais poderoso.&lt;/li&gt;
&lt;li&gt;Junto com Exchanges possui caching.&lt;/li&gt;
&lt;li&gt;Possui suporte offline.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;desvantagens&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Biblioteca bem nova (poucos materiais sobre).&lt;/li&gt;
&lt;li&gt;Pouca adoção no mercado.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Realy Modern&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;vantagens&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Focado em performance.&lt;/li&gt;
&lt;li&gt;Pré-compila as queries do GraphQL em build time(evita que o usuário baixe o parser).&lt;/li&gt;
&lt;li&gt;Possui sistema de caching/states.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;desvantagens&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Necessita de configurações a mais no tooling, seja no webpack, no diretório de build, nos vamos ter que configurar isso. &lt;/li&gt;
&lt;li&gt;Curva de aprendizagem é maior devido a mais detalhes para o funcionamento.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Apollo Client&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;vantagens&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Largamente usado no mercado.&lt;/li&gt;
&lt;li&gt;Focado em performance.&lt;/li&gt;
&lt;li&gt;API simplificado e com suporte aos hooks.&lt;/li&gt;
&lt;li&gt;Muito material online.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;desvantagens&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extremamente grande!!! Nós temos a necessidade de usar o parser.&lt;/li&gt;
&lt;li&gt;Atualizações constantes com Breaking Changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Espero ter tirado suas dúvidas em torno de algumas bibliotecas mais famosas do GraphQL e de como ele funciona, sinceramente eu não tinha noção que ele era assim, cheguei a dizer que ele não fazia sentido nenhum, mas agora faz : ), vaaaleu!&lt;/p&gt;

</description>
      <category>graphql</category>
      <category>apollo</category>
      <category>introduction</category>
      <category>docs</category>
    </item>
    <item>
      <title>Tipos de aplicações</title>
      <dc:creator>Andres dos Santos</dc:creator>
      <pubDate>Sat, 31 Oct 2020 15:24:31 +0000</pubDate>
      <link>https://dev.to/andresdosantos/tipos-de-aplicacoes-1ali</link>
      <guid>https://dev.to/andresdosantos/tipos-de-aplicacoes-1ali</guid>
      <description>&lt;h4&gt;
  
  
  Tipos de Aplicação
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Site estático(HTML, CSS, JS)&lt;/strong&gt; - GatsbyJS, Hexo - Pode ser um markdown ou um HTML que ele vai gerar um site estático.&lt;br&gt;
&lt;strong&gt;Client Side Rendering(Single Page Aplication(SPA))&lt;/strong&gt; - Create React App - Nós teremos um arquivo JS que é baixado no browser e ele sim vai pegar tudo do lado do client e vai renderizar os dados que vai ser renderizado na tela.&lt;br&gt;
&lt;strong&gt;Server Side Rendering(SSR)&lt;/strong&gt; - Next.js - Tudo é renderizado no lado do servidor, então o usuário faz uma chamada, aí ele renderiza tudo do lado do servidor e depois ele é entregue para o client.&lt;/p&gt;

&lt;h4&gt;
  
  
  Entendo cada um
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;static site generation&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;vantagens&lt;/em&gt;: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uso quase nulo do servidor, tudo já foi renderizado antes pelo servidor, ou seja, ele não vai ter quase nenhum processo para ele rodar.&lt;/li&gt;
&lt;li&gt;Pode ser servidor numa CDN, aí eu tenho um cache melhor, não preciso ficar buscando tudo toda hora.&lt;/li&gt;
&lt;li&gt;Melhor performance entre todos.&lt;/li&gt;
&lt;li&gt;Flexibilidade para usar qualquer servidor, como é HTML, CSS e JS, eles são suportados por qualquer servidor.
&lt;em&gt;desvantagens&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Alto tempo de building, várias páginas demoram mais e mais para carregar.&lt;/li&gt;
&lt;li&gt;Dificuldade para escalar grandes aplicações.&lt;/li&gt;
&lt;li&gt;Se é necessário atualizar muito, não vai dar para fazer bem.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;single page application&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;vantagens&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Permite ricas interações nas páginas sem precisar recarregar, a partir do momento que é baixado o app.js não é preciso ficar dando reload, afinal, tudo vai ser feito no browser.&lt;/li&gt;
&lt;li&gt;Site mais rápido depois do load inicial, depois de feito o carrgamento do app.js ele já carregou tudo que precisava.&lt;/li&gt;
&lt;li&gt;Ótimo para aplicações web, muito bom para Spotify web, Twitter web, Facebook web, porque ele possui várias libs para trabalhar aqui no SPA.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;desvantagens&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O load inicial pode ser muito grande, se o arquivo JS for muito grande seu load inicial pode demorar muito.&lt;/li&gt;
&lt;li&gt;Performance imprevisível, porque numa página pode ter um JS maior, em outra menor, o que deixa inconsistências na performance.&lt;/li&gt;
&lt;li&gt;Dificuldade no SEO, todo site é crawleável pelo Google, por exemplo, ele precisa disso para dizer sobre o que seu site fala, só que como é necessário carregar o JS para fazer requisições e depois renderizar, você não tem um conteúdo direto ali, você tem apenas uma etapa com o esqueleto pronto e aí sim, você tem o conteúdo.&lt;/li&gt;
&lt;li&gt;A maioria não é indexado.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;server side rendering&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;vantagens&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;É ótimo em SEO, tudo é renderizado no lado do servidor, então quando o Google abre seu site ele já recebe tudo pronto e certinho ali, todo o conteúdo.&lt;/li&gt;
&lt;li&gt;Meta tags com previews certos, então todos os dados de titles, images, vai estar tudo correto de acordo com aquela página em questão.&lt;/li&gt;
&lt;li&gt;Melhor performance para o usuário, pode ser visto mais rápido. É tudo entregue pronto. Abriu viu!&lt;/li&gt;
&lt;li&gt;Código compartilhado com o backend em Node, porque como é renderizado no SSR agente pode ter as coisas do backend com o frontend se comunicando.&lt;/li&gt;
&lt;li&gt;Menor processamento no lado do usuário, tudo é renderizado e entregue pronto. A máquina do cliente vai necessitar de pouco uso da processamento.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;desvantagens&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TTFB(Time to first byte) maior, o servidor vai preparar todo o conteúdo para entregar, então como tudo fica nas mãos do servidor ele precisa fazer todos os processos.&lt;/li&gt;
&lt;li&gt;HTML maior, como ele já entrega todo o HTML montado, ele vai ser maior.&lt;/li&gt;
&lt;li&gt;Reload completo nas mudanças de rotas, ele precisa recarregar a cada rota passada.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O Next.js suporta todos: SSG, SPA e SSR!&lt;/p&gt;

&lt;h4&gt;
  
  
  Mas quando usar cada um?
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;SSG&lt;/code&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Para um site simples, sem muitas interções com o usuário.&lt;/li&gt;
&lt;li&gt;Se você for a única pessoa que publica conteúdo.&lt;/li&gt;
&lt;li&gt;Se o conteúdo muda pouco.&lt;/li&gt;
&lt;li&gt;Se não tiver muitas páginas.&lt;/li&gt;
&lt;li&gt;Exemplos: Landing page | Blog | Portifólios&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;SPA&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quando não tem tanta necessidade de indexar informações no Google.&lt;/li&gt;
&lt;li&gt;Quando o usuário faz muitas interações nas páginas e não quero refreshes.&lt;/li&gt;
&lt;li&gt;Quando as informações são diferentes para cada usuários, a exemplo o Twitter web | Facebook web.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;SSR&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quando tem a necessidade de um SPA, mas precisa de um loading mais rápido.&lt;/li&gt;
&lt;li&gt;Quando o conteúdo muda frequentemente.&lt;/li&gt;
&lt;li&gt;Quando trabalha com um número muito grande de páginas.&lt;/li&gt;
&lt;li&gt;Quando precisar de uma boa indexações no Google.&lt;/li&gt;
&lt;li&gt;Exemplos: E-Commerce | Sites de notícias&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Espero que tenham entendido pessoal, qualquer dúvida, envie aí que eu estudo e te passo, vaaaleu!&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>ssg</category>
      <category>spa</category>
      <category>ssr</category>
    </item>
    <item>
      <title>Como usar generics no TypeScript?</title>
      <dc:creator>Andres dos Santos</dc:creator>
      <pubDate>Sat, 31 Oct 2020 13:43:26 +0000</pubDate>
      <link>https://dev.to/andresdosantos/como-usar-generics-no-typescript-3la</link>
      <guid>https://dev.to/andresdosantos/como-usar-generics-no-typescript-3la</guid>
      <description>&lt;h1&gt;
  
  
  Generics
&lt;/h1&gt;

&lt;p&gt;Quando estamos escrevendo um código, uma das coisas que precisamos nós atentar é a reutilização dele, assim eu consigo escrever menos e ter apenas um ponto de contato caso tenha algum bug. Mas para fazer isso nós temos que tornar esses &lt;strong&gt;métodos mais genéricos&lt;/strong&gt;. Quando nós trabalhamos com uma linguagem tipada igual ao TS nós sabemos que é preciso definir os tipos das nossas entradas no início e com isso o que era pra ser mais genérico acaba não sendo. É por isso que existem os &lt;em&gt;generics&lt;/em&gt; que é para nós termos uma maior flexibilidade mesmo na linguagem tipada.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vamos começar fazendo uma alusão ao &lt;code&gt;useState&lt;/code&gt; do React&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nós vamos ver que podemos usar &lt;code&gt;numbers&lt;/code&gt; e &lt;code&gt;string&lt;/code&gt; através do &lt;code&gt;union&lt;/code&gt; do TS. Então podemos começar com &lt;code&gt;string&lt;/code&gt; e terminar com &lt;code&gt;number&lt;/code&gt; ou vice-versa.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Pega o estado atual&lt;/span&gt;
  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;getState&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// Seta um novo estado&lt;/span&gt;
  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newState&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;newState&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;getState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setState&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;newState&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;newState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;123&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getState&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="nx"&gt;newState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;foo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getState&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Agora nós vamos bloquear a alteração de tipo depois de definido&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Então, se eu defino que é uma &lt;code&gt;string&lt;/code&gt; ele não pode alterar mais esse tipo. Quando agente cria uma função nós temos os &lt;code&gt;()&lt;/code&gt; que é onde ficam os atributos da nossa função. Então, antes deles nós vamos usar os &lt;code&gt;generics&lt;/code&gt;. Em geral para passar os tipos nós usamos certos símbolos, que são letras com significado semântico.&lt;/p&gt;

&lt;p&gt;Vamos conferir a sintaxe:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;S&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;S&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vemos que alteramos o &lt;code&gt;let state:&lt;/code&gt; de &lt;code&gt;number | string&lt;/code&gt; para &lt;code&gt;S&lt;/code&gt;, mas o que ele significa?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Esse símbolo representa para sua função que ela agora pode trabalhar com alguma coisa do tipo &lt;code&gt;S&lt;/code&gt;. Na nossa primeira função passada acima, com esse código alterado ela ainda não vai mostrar erro, pois nós não falamos de que tipo é esse &lt;code&gt;S&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Como definimos um tipo para &lt;code&gt;S&lt;/code&gt;?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ela é feita diretamente no momento em que nós chamamos a função. Por padrão o tipo desses atributos são &lt;code&gt;unknow&lt;/code&gt;, eles aceitam qualquer coisa, mas quando é passado para ele um tipo ele passa a ser só daquele tipo. E é isso que causa a flexibilidade do &lt;code&gt;generics&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Lembrando que temos alguma letras padrões:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;S&lt;/strong&gt; - State&lt;br&gt;
&lt;strong&gt;T&lt;/strong&gt; - Type&lt;br&gt;
&lt;strong&gt;K&lt;/strong&gt; - Key&lt;br&gt;
&lt;strong&gt;V&lt;/strong&gt; - Value&lt;br&gt;
&lt;strong&gt;E&lt;/strong&gt; - Element&lt;/p&gt;

&lt;p&gt;Feito alterações o código fica assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;S&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;S&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Pega o estado atual&lt;/span&gt;
  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;getState&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// Seta um novo estado&lt;/span&gt;
  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newState&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;S&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;newState&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;getState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setState&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;newState&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Atribuição de tipo para S.&lt;/span&gt;

&lt;span class="nx"&gt;newState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;123&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getState&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="nx"&gt;newState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;123&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ERRO - Pois foi atribuído string ao unknow.&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getState&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="nx"&gt;newState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;123&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getState&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora, seu eu passo que ele é um &lt;code&gt;number&lt;/code&gt;, &lt;code&gt;boolean&lt;/code&gt;, &lt;code&gt;any&lt;/code&gt;, ele vai passar a ser todos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mas isso gera um problema para nós, nós podemos alterar isso a qualquer momento!!!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para bloquear que ele seja o que nós passarmos para ele, nós temos que mudar isso:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;S&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;S&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aíiii, quando eu passar o primeiro tipo para ele, é esse que ele vai usar para sempre, &lt;br&gt;
então...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;S&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;S&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Pega o estado atual&lt;/span&gt;
  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;getState&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// Seta um novo estado&lt;/span&gt;
  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newState&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;S&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;newState&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;getState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setState&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;newState&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Pronto, agora ele só aceita number&lt;/span&gt;

&lt;span class="nx"&gt;newState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;123&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getState&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="nx"&gt;newState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;123&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// AQUI VAI DAR ERRO!&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getState&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="nx"&gt;newState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;123&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getState&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;FALADO&lt;/strong&gt;&lt;br&gt;
"Eu sou flexível, posso ser qualquer coisa, mas depois que eu ganho um tipo, eu não mudo mais".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agora, vamos colocar um tipo como &lt;code&gt;default&lt;/code&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;É simples, é só fazer isso:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// number é default&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;S&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt; 

&lt;span class="c1"&gt;// Não preciso passar nada na chamada da função.&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;newState&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Uso&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Esses tipos são muitos usados com os &lt;code&gt;hooks&lt;/code&gt; do React, mas podem ser usados com uma infinidade de coisas. Aleḿ disso, eles funcionam também com objetos maiores como: 
&lt;code&gt;React.FC&amp;lt;Props, States&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bom, é isso galera, espero poder ter ajudado, confesso que não é simples de entender mas é praticando que se aprender, então, vaaaleu, deixa eu ir praticar.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>typescript</category>
      <category>generics</category>
      <category>react</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Cascata no styled-components</title>
      <dc:creator>Andres dos Santos</dc:creator>
      <pubDate>Tue, 06 Oct 2020 21:36:25 +0000</pubDate>
      <link>https://dev.to/andresdosantos/alguns-trucks-no-styled-components-12h9</link>
      <guid>https://dev.to/andresdosantos/alguns-trucks-no-styled-components-12h9</guid>
      <description>&lt;p&gt;Faaala Dev's! Hoje eu vou passar para vocês um "truck" no styled-components que eu demorei para pegar, não é dificil. Sabe quando nós vamos usar o CSS? Ele é escrito assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.container {
   margin: 0;
   padding: 0;
   box-sizing: border-box;
}

.container form {
   max-width: 300px;
   border: 1px solid #cd35bf;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Viu só! Ele é escrito no formato de cascata &lt;code&gt;.container form&lt;/code&gt;. Daí eu pensei "preciso fazer isso no &lt;code&gt;styled-components&lt;/code&gt;", mas como? Galera, é muito fácil, a sintaxe é assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import styled from 'styled-components';

export const Container = styled.div`
   margin: 0;
   padding: 0;
   box-sizing: border-box;

   form {
     max-width: 300px;
     border: 1px solid #cd35bf;

     h1 {
       color: #cd35bf;
       font-family: 'Roboto', sans-serif;
     }
   }
`;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Viu só, basta encadear no formato de objeto, onde &lt;code&gt;h1&lt;/code&gt; está dentro de &lt;code&gt;form&lt;/code&gt; que estão dentro de &lt;code&gt;Container&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Bom dev's por hoje é isso, qualquer dúvida ou sugestão comentem que eu busco para vocês, vaaleu! 😎&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Como criar um projeto React Native com TypeScript</title>
      <dc:creator>Andres dos Santos</dc:creator>
      <pubDate>Mon, 05 Oct 2020 01:33:57 +0000</pubDate>
      <link>https://dev.to/andresdosantos/como-criar-um-projeto-react-native-com-typescript-4407</link>
      <guid>https://dev.to/andresdosantos/como-criar-um-projeto-react-native-com-typescript-4407</guid>
      <description>&lt;p&gt;Faaaala Dev's, no meu primeiro post vou ensinar a vocês a como criar um projeto React Native usando o TypeScript, já sabemos que o TS é o "amigo inteligente" do JavaScript, por isso ele vai ser cada vez mais usado no mercado já que as tipagens são de extrema importância na segurança de resposta e na manutenção do código. Já imaginou se o seu código começa a ficar muito grande e daí, no meio do caminho aparece aquele indesejável &lt;code&gt;undefined&lt;/code&gt;? Isso vai te frustar bastante 😅, mas não se preocupe nós vamos mudando aos poucos tudo para o TypeScript 😎.&lt;/p&gt;

&lt;p&gt;Lembrando que não é para &lt;em&gt;destruirmos o JavaScript de uma vez por todas&lt;/em&gt;, até porque ao final tudo é &lt;code&gt;bundle&lt;/code&gt;, ou seja, JavaScript.&lt;/p&gt;

&lt;h4&gt;
  
  
  Vamos definir o diretório
&lt;/h4&gt;

&lt;p&gt;Eu particularmente gosto de deixar meus projetos em documentos, então bora navegar até lá.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No terminal&lt;/strong&gt;, garanta que você esteje na raíz do usuário padrão do sistema.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ cd ~
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora que você está no usuário, navegue até &lt;code&gt;documentos&lt;/code&gt;, para isso vamos usar o &lt;code&gt;cd&lt;/code&gt; que significa &lt;em&gt;change directory&lt;/em&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ cd Documents/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Beleza, vamos criar uma pasta para o nosso projeto, usaremos o &lt;code&gt;mkdir&lt;/code&gt; que significa &lt;em&gt;make directory&lt;/em&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ mkdir app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ⚠️Atenção aqui!⚠️
&lt;/h3&gt;

&lt;p&gt;De acordo com as últimas recomendações do pessoal do React não é legal ter o &lt;strong&gt;React Native CLI&lt;/strong&gt; instalada globalmente no sistema, então vamos removê-los.&lt;/p&gt;

&lt;p&gt;** Desinstalar **&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ npm uninstall -g react-native-cli

  ou

$ yarn remove -g react-native-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Finalmente&lt;/strong&gt; podemos usar a &lt;strong&gt;cli&lt;/strong&gt; do &lt;strong&gt;React Native&lt;/strong&gt; para criar um projeto usando &lt;strong&gt;TypeScript&lt;/strong&gt;. Então bora lá ...&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Beleza Dev's espero que vocês tenham gostado desse primeiro post, fico por aqui e até a próxima.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
