Aprenda APIs: crie um aplicativo de pesquisa com JavaScript, TypeScript, React e Next. js no modo Light & Dark | Zoë Davidson | Skillshare

Velocidade de reprodução


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Aprenda APIs: crie um aplicativo de pesquisa com JavaScript, TypeScript, React e Next. js no modo Light & Dark

teacher avatar Zoë Davidson, Software Engineer & Cinematographer

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Aulas neste curso

    • 1.

      Introdução

      1:13

    • 2.

      PROJETO DO CURSO 

      0:35

    • 3.

      APIs e bancos de dados

      0:44

    • 4.

      Next.js

      0:26

    • 5.

      Configuração de projeto

      2:51

    • 6.

      Estilizando o aplicativo

      21:47

    • 7.

      Dark Mode e Zustand

      9:54

    • 8.

      Usando uma API

      16:38

    • 9.

      Adicionando lógica de pesquisa

      19:55

    • 10.

      Conclusão

      0:55

  • --
  • Nível iniciante
  • Nível intermediário
  • Nível avançado
  • Todos os níveis

Gerado pela comunidade

O nível é determinado pela opinião da maioria dos estudantes que avaliaram este curso. Mostramos a recomendação do professor até que sejam coletadas as respostas de pelo menos 5 estudantes.

376

Estudantes

5

Projetos

Sobre este curso

Este curso vai ensinar tudo o que você precisa saber para se conectar a uma API usando sintaxe JavaScript e criar um aplicativo da Web ao longo do caminho. Você aprenderá a:

  • O que é uma API
  • Como buscar a partir de uma API usando JavaScript/TypeScript
  • Como trabalhar com Next.js e Material UI
  • Como usar lógica de filtro com JavaScript/TypeScript

Meu nome é Zoë, sou engenheiro de software e ex-professor de filme. Você pode conferir meu trabalho aqui.

Este curso é para qualquer um que já teve interesse em aprender a programar ou está querendo fazer uma entrevista técnica em um futuro próximo.

Este curso incluirá um guia passo-a-passo de como aprender usar APIs do zero, incluindo:

  • Como usar APIs no React
  • Como podemos filtrar dados de API
  • Como incorporar lógica à filtragem
  • Como usar o state

Depois de fazer o curso, deixe um comentário sobre o que achou!

Materiais necessários

- Computer com conexão à Internet

- Editor de código como o Visual Studio Code

- Navegador como o Google Chrome

RECURSOS

Equipamento de filmagem

  1. Canon 5D IV
  2. Canon 24 - 70 f/2.8
  3. Amaran 60x - acessível e poderoso
  4. Desview T3 Teleprompter
  5. Montagem de mesa de pequeno equipamento
  6. Sennheiser MKE 600
  7. Braço de microfone de neewer
  8. Zoom H4n Pro

Equipamento de desenvolvimento

  1. M1 Macbook Pro 13"
  2. Teclado mágico da Apple
  3. Logitech MX em qualquer lugar
  4. Suporte duplo para laptop
  5. LG 4k 27"
  6. Cadeira de mesa ergonômica - barata
  7. Bose QC 35 II
  8. AirPods Pro
  9. Monitor de expresso e stand (viagem) - incrível

Conheça seu professor

Teacher Profile Image

Zoë Davidson

Software Engineer & Cinematographer

Professor

Hey! I'm Zoe, a software engineer, filmmaker, and former professor from Toronto, Canada. I have an MFA in Film from Howard University, and also do work as a software engineer.

In the past, I've worked for the University of the District of Columbia, the Academy of Motion Picture Arts and Sciences, Lionsgate, Huffington Post, and I'm a member of organizations like the Canadian Society of Cinematographers.

The films that I've worked on have been featured at festivals around the world, including Sundance, ABFF, Trinidad Tobago Film Festival, and CaribbeanTales.

Check out my latest work, here: zoeahdavidson.com

Visualizar o perfil completo

Level: Intermediate

Nota do curso

As expectativas foram atingidas?
    Superou!
  • 0%
  • Sim
  • 0%
  • Um pouco
  • 0%
  • Não
  • 0%

Por que fazer parte da Skillshare?

Faça cursos premiados Skillshare Original

Cada curso possui aulas curtas e projetos práticos

Sua assinatura apoia os professores da Skillshare

Aprenda em qualquer lugar

Faça cursos em qualquer lugar com o aplicativo da Skillshare. Assista no avião, no metrô ou em qualquer lugar que funcione melhor para você, por streaming ou download.

Transcrições

1. Introdução: Você já deve ter ouvido falar de APIs, mas sabe como usá-las? Hoje, veremos tudo o que você precisa saber para criar seu próprio aplicativo web usando APIs gratuitas. Oi, meu nome é Zoe. Sou engenheiro de software e ex-professor que adora educar outras pessoas sobre como começar a programar Eu criei muitos sites e aplicativos da web usando React CSS, HTML. Next S e muito mais. Hoje, utilizaremos a API gratuita do Rest Country para criar esse aplicativo web de pesquisa de países Este projeto nos permitirá aprender como usar o next S e reagir, como interagir e incorporar APIs em nossos projetos. E como usar Javascript ou Typescript para filtrar e retornar sucintamente os dados solicitados com base na consulta de um usuário Começaremos com uma visão geral básica do que são as APIs e por que estamos usando a seguir. Sim. E então vamos mergulhar direto em nosso tutorial. O tutorial será dividido em três partes distintas. Primeiro, vamos estilizar o aplicativo web depois conectá-lo à API. E, por fim, refinaremos a lógica da consulta para garantir que os usuários recebam exatamente o que estão procurando Este curso é para qualquer pessoa interessada em aprender a trabalhar com uma API em um aplicativo web. Ao final deste curso, você poderá fazer tudo isso sozinho. Vamos começar. 2. PROJETO DO CURSO : Projeto de classe. O projeto dessa classe é criar um aplicativo web de busca de países totalmente funcional usando uma API gratuita. Para isso, você precisará acessar um computador e um editor de código como o Visual Studio Code. Você também deve ter algum conhecimento de Javascript ou script de tipo, bem como HTML e CSS. Para acelerar nosso aplicativo, usaremos uma estrutura chamada Next S, que usa o React. Também usaremos o material I para alguns componentes básicos de estilo Deixarei links para todos os ativos e recursos que você precisará na guia Projeto e Recursos logo abaixo. 3. APIs e bancos de dados: Apis e bancos de dados. Uma API ou interface de programação de aplicativos é um conjunto de regras que permite aos desenvolvedores de front-end criar, ler, atualizar e excluir dados no back-end Essas APIs são criadas por desenvolvedores de back-end usando linguagens como Python, Ruby, Java Os bancos de dados, por outro lado, são onde os dados residem e são acessados por meio dessas APIs. Dependendo do tipo de solicitação de API enviada pelo front-end, seja para criar, ler, atualizar ou excluir, um conjunto diferente de dados será retornado. Por exemplo, se um novo usuário configurar uma conta digitando seu endereço de e-mail e senha Depois de clicarem em Enviar, essas informações serão enviadas ao banco de dados e um novo usuário será criado. 4. Next.js: Next S. Nos anos que passaram desde que o Reacts introduzido pela primeira vez, muitos frameworks foram construídos e desenvolvidos a partir dele Uma estrutura muito popular hoje em dia é o Next S. O Next S fornece muitas otimizações prontas uso, como renderização do lado do serviço, roteamento e E, como tal, é o favorito dos desenvolvedores de front-end. Vamos usá-lo em nosso projeto, então vamos nos aprofundar e começar. 5. Configuração de projeto: Vamos começar a trabalhar nesse projeto. O aplicativo que estamos procurando criar é mais ou menos assim. É um aplicativo de busca de países que, ao digitar o nome de um país, você pode realmente obter o resultado. Você também deve poder filtrar por região. Então, em algum lugar que seja na África ou nas Américas ou na Europa, etc., etc. Além disso, devo dizer que você também pode alterná-lo para os modos escuros. Você pode ativar o modo escuro ou o modo claro. Então, sim, vamos criar esse aplicativo usando a API Country's Rest gratuita que é fornecida aqui. Então, como você pode ver, temos uma API Country Rest que nos permite acessar esse endpoint e receber vários detalhes diferentes Assim, podemos obter o nome, as bandeiras. Há muitas informações diferentes. Então, deixarei um link para este site na guia Projetos e Recursos abaixo, para que você possa acompanhar e usá-lo em seu projeto. E também a inspiração para este projeto e o design dele, na verdade, vêm de um site chamado Front End Mentor É aí que eu realmente coloco muitos dos meus projetos para trabalhar e construir projetos, se você quiser dar uma meus projetos para trabalhar e construir projetos, olhada , no front-end, ou é um projeto totalmente gratuito para usar, mas você pode pegar o design aqui e vamos trabalhar essa imagem aqui para criar nosso projeto. Sim, vamos começar. Vou começar, como mencionei, usaremos a próxima interface de usuário de material JS e o script de tipo. Na verdade, criei um modelo que vamos usar para realmente trabalhar em nosso projeto. Aqui, vou seguir em frente e começar a usar esse modelo em um repositório Incrível. Agora, o repositório foi criado Na verdade, podemos usá-lo localmente para desenvolver nosso aplicativo de busca de países. E também deixarei um link para o modelo e o repositório que eu uso para isso, que você pode usar para começar como ponto de partida E você também pode verificar seu trabalho à medida que avança, se quiser ver como ficou o projeto final . Tudo bem, então eu vou continuar e clonar isso. Incrível. E então eu vou seguir em frente e abri-lo. Perfeito. Então, a próxima coisa que precisamos fazer, como sempre que clonamos um projeto, é instalá-lo Então, vamos fazer uma instalação rápida do NPM. Tudo bem, legal. Então , ele está instalado agora. Devemos apenas ser capazes de fazer MPM run dev. Incrível. E tudo começa no host local 3.000 e ótimo, temos nosso aplicativo instalado e funcionando, então estamos prontos para Vamos continuar e começar. 6. Estilizando o aplicativo: Nesta seção, vamos nos concentrar principalmente no estilo. Então, se você estiver mais interessado na lógica, pode pular para a próxima lição Tudo bem, a primeira coisa que eu quero fazer, como costume, é criar uma nova pasta para meus componentes. Então eu quero ir em frente e limpar a próxima página do GS. Então, vou limpar tudo na seção principal aqui, exceto isso. Também vou remover os estilos do di aqui, nesta pesquisa de país. Isso deve ser bom por enquanto quando estamos analisando este projeto de exemplo. Certo? Temos algumas seções diferentes com as quais estamos trabalhando, certo? Há uma seção de cabeçalho, seção de entrada, um filtro de região aqui, uma seleção, eu vejo isso como algumas seções distintas. Há o cabeçalho e depois essa peça maior, a própria peça country. Depois, há a exibição de todas essas cartas diferentes. Vamos dividi-lo em pedaços. O que vamos fazer aqui, primeiro, vou criar um contêiner para a coisa toda. Vou chamá-lo de contêiner de busca de países. Isso só vai abrigar tudo em que estamos trabalhando. Legal. E usaremos o Emmett e depois importaremos isso aqui. Tudo bem? Perfeito. Se verificarmos isso na frente, veremos que temos nosso contêiner de busca de países lá. Perfeito. Isso vai conter algumas coisas diferentes. Vamos criar outro componente chamado cabeçalho. Vamos criar outro componente chamado, hum, vamos chamá-lo de Country Search. Ok, e vamos importar os dois para o contêiner Country Search. Vou trocar isso uma caixa porque é como o material que você usa para fazer isso. E isso nos permitiria usar adereços diferentes usando X, X, se você nunca ouviu falar disso antes O adereço SX basicamente permite que você acesse os mesmos adereços que você pode adicionar como um adereço de estilo em um Mas isso permite que você faça coisas especiais, como consultas de mídia e coisas assim que você não pode fazer no suporte de estilo Eu prefiro usar os elementos dos componentes muy sempre que possível, quando eles estão disponíveis para todos nós Veja, temos nosso chefe de busca de país. Tudo bem, então olhando o design aqui, você notará que temos um pouco de margem ou preenchimento em cada lado, e então é igual em ambos os componentes, e então temos a peça maior aqui Tudo bem, eu quero abordar isso em várias etapas. A primeira coisa que quero fazer, como mencionei, é estilizar o projeto em si. Então, vamos trabalhar no estilo e, a partir daí, basicamente queremos de uma forma que ambos estilizá-los de uma forma que ambos possam ter algum preenchimento à esquerda e à direita Vamos entrar primeiro no cabeçalho. A cabeça também se transforma em uma caixa. O cabeçalho tem dois elementos principais. Tem a guerra no mundo e também tem o botão do modo escuro. Então, vamos começar usando um elemento tipográfico, digamos, que vamos usar, vamos dizer que no texto que estamos no mundo, isso será da variante H, porque cada página precisa ter um H. E então provavelmente não será o formato certo, mas podemos lidar com isso com x, certo? Sim, é um pouco grande demais. Então, vamos usar o SX e , em seguida, vamos configurá-lo para ter talvez o tamanho da fonte: um Ram, talvez dois Ram 1.5 Então, vamos fazer com que a fonte espere cerca de 700 Tudo bem, legal. Esse é o elemento um. E então o segundo é esse botão. E o botão diz modo escuro como a. Sim, também há um botão de botão. Desculpe. Há também um ícone que parece um tipo de meia-lua, lua crescente Vamos procurar por luas. E este parece bem próximo, então vamos realmente usar isso em nosso botão, então eu vou usar. Legal. E temos nossa pequena lua bem ali. Tudo bem. Incrível. A próxima coisa que vamos querer fazer aqui é colocar isso em uma linha. Então, vou usar os adereços SS e vou simplesmente mudar a tela para flexionar e salvá-la Vou justificar o espaço de conteúdo entre eles, vou alinhar os itens ao centro Incrível. Sim. Tudo bem, então, para o cabeçalho, agora eu também sei que quero alguns preenchimentos Vou fazer com que o preenchimento da parte superior e inferior seja um M e a esquerda e a direita sejam dois ram Isso deve ser bom por enquanto. O que mais precisamos fazer? Queremos ter certeza de que, sim, a cor, na verdade, se você notar, é um pouco diferente. Na verdade, quero definir a cor geral do plano de fundo do aplicativo para ser assim, cinza claro, e então esse será nosso branco. Vou pegar isso, vou usar esse seletor de cores Vou pegar essa cor aqui e, incrível, essa será a cor do plano de fundo real de todo o aplicativo. O que eu quero fazer aqui, acho que vamos usar o índice. Na verdade, vamos definir aqui a cor de fundo desse geral para ser essa cor. Então, vamos usar a cor de fundo, configurá-la para ser incrível. E você pode ver que isso mudou um pouco aqui. É um pouco difícil de ver só porque é apenas uma pequena seção, mas ficará um pouco mais aparente à medida que começarmos a trabalhar um pouco mais na maçã. A outra coisa que eu quero fazer aqui é definir o tamanho desse elemento, porque é uma coisa do tipo uma página. Eu quero que a altura mínima do elemento seja de 100 w de altura. Isso será 100% da altura da visão que estamos ocupando. E então eu quero que apenas a altura normal ou a altura máxima provavelmente seja adequada ao conteúdo. E isso será mais relevante quando começarmos a obter vários resultados diferentes. Tudo bem, vou remover esses estilos extras aqui. Tudo bem, legal. Então, a próxima coisa que vamos querer fazer agora é realmente mudar a cor de fundo do cabeçalho. Então, o cabeçalho, agora vamos voltar aqui e definir a cor de fundo para ser apenas branca, fria e que você mal consegue ver, mas há uma pequena diferença aqui. Vou fazer mais uma coisa para diferenciá-lo. Você vê como há essa pequena caixa de sombra aqui. Vamos apenas adicionar uma sombra de caixa na parte inferior desta peça, aqui. Então, vou copiar isso e depois adicioná-lo à nossa cabeça. E vamos modificá-lo um pouco. Tudo bem, então vamos fazer com que seja deslocado, talvez dois pixels em cada direção Vamos torná-lo cinza claro. Guarde isso. Como você pode ver, temos apenas um tipo muito básico de diferenciação entre os dois. Isso é bom o suficiente por enquanto. Sabe, acho que também podemos fazer coisas como mudar a cor do botão e coisas assim. Não necessariamente como a coisa mais importante a fazer. Acho que a próxima coisa mais importante a fazer seria reduzir as vendas do resto. Tudo bem, então a próxima coisa que vamos fazer aqui é trabalhar em nosso contêiner de busca de países. Então, nossa busca por país, desculpe. Então, na busca por país , haverá um monte de elementos diferentes, bem, três. Então, vamos mudar para uma caixa. Primeiro, teremos uma entrada, teremos a seleção. E então vamos mostrar todas as cartas, acredito que sejam materiais. Ele tem um componente de campo de texto de entrada de texto. E acho que vamos querer usar o esboço para isso Então, vou pegar essa linha de código aqui e copiá-la de volta em nosso projeto e adicioná-la como nosso primeiro elemento. Então, vamos ter um campo de texto que importamos do material I. E então eles também têm um componente Select Select. E vamos pegar tudo isso aqui e usar isso. Perfeito. E só precisamos adicionar todas essas importações ausentes para que não ocorram erros. Estou apenas usando isso como modelo agora. Vamos prosseguir e alterá-lo de acordo com nossos propósitos. Tudo bem, legal. Portanto, temos nossa entrada de texto e temos nosso H ou nossa seleção suspensa Vou fazer mais uma coisa e vou embrulhá-las em uma caixa porque na verdade, nossos cartões também serão exibidos nesta página. Então, vamos guardar isso. E então eu vou mudar a exibição disso para Flex Guarde isso. Incrível. Legal. Então, agora eles estão em uma linha, mas o espaçamento não está certo Realmente correto. No momento, o controle do formulário está dizendo largura total. Na verdade, não queremos isso. Queremos que seja com talvez cinco vezes, dez RAM, porque serão palavras, mas na verdade não precisamos que seja tão largo E então vamos realmente querer que eles tenham espaço entre eles também tenham espaço entre eles. Então, vamos fazer a mesma coisa. Pronto para ir? Justifique o conteúdo. Vamos configurá-lo para um espaço entre seis vezes. Legal. Incrível. Como você notará, ainda falta aquele acolchoamento do lado de fora Então, vamos adicionar outro S x pro à caixa externa e adicionar um pouco de preenchimento lá Então, vamos usar o padding e vamos usar dois Ram ao redor e dizer isso, incrível, legal Está um pouco mais alinhado. Agora, a última coisa que quero fazer com a entrada de texto é torná-la um pouco mais longa, porque você pode ver que na verdade é um pouco mais longa. E eu vou fazer isso, vamos definir a largura para ser, o que, 20 Ram? Na verdade, digamos que é uma largura de visualização de 20% , cujo peso muda com o tamanho real da largura da visualização da tela, em oposição a M. Isso sempre será cerca de 30% da largura da visualização. É um pouco mais responsivo. Eu farei a mesma coisa com o select here. Talvez seja necessário mudar isso para 2015. Ou 20. Talvez 15. Sim, parece certo. Tudo bem, legal. E então este pode realmente ser um pouco mais longo, talvez 40. Legal. Isso deve ser bom. Então, outra coisa que notei, acabei de notar, é que a cor de fundo também é branca na natação, eu a defini como branca. Diga isso. Tudo bem, incrível, legal Então, temos uma entrada de texto realmente básica, temos nosso select. E então vamos fazer nosso cartão suspenso apenas para personalizar isso um pouco mais Enquanto estamos aqui, notaremos que o texto inicial é pesquisar por ponto do país. Então, queremos mudar isso. Em vez de ser leigo, vamos dizer que procure um país e diga que aqui diz idade. Nós realmente queremos que isso seja filtrado por região. Vamos mudar isso para filtrar por região. Nós vamos dizer isso. Vamos fazer um pouco mais, vamos tornar esses 20 perfeitos. Hum, e acho que o fundo disso também deveria ser branco Diga isso. Incrível. O próximo que queremos fazer agora é alterar as diferentes opções reais aqui, os itens do menu. O que eu vou fazer é, na verdade , encerrar isso e começar com um. É a África, a América. Vamos digitá-los. Então, vamos fazer a África. África, África. E então eu vou copiar e colar isso algumas vezes na América. Na verdade, vou fazer um acima disso e isso será tudo para nós. Vou adicionar outro. Você verá por que estou adicionando isso mais tarde, mas vou criar apenas um. Isso é tudo. Tudo bem, América. Uma coisa interessante sobre essa API é que, na verdade, ela não é a América. Está procurando, são as Américas, como a América do Norte, a América do Sul, as Américas Você deseja alterar o valor desse item de menu para Américas, mesmo que a tela mostre América Na verdade, podemos mudar para as Américas apenas para sermos semanticamente corretos Tudo bem, analisando a lista, vamos mudar essa para a Ásia e mudar aquela para você. E o que estou fazendo aqui, caso você não tenha, você não esteja familiarizado com esse tipo de truque de teclado, estou pressionando o comando D para selecionar a palavra em que estou trabalhando. E então a próxima versão dessa palavra, a próxima duplicata dessa palavra Então, eu só quero pressionar o comando D até selecionar todo o número de versões dessa palavra que estão na minha frente. Então, vamos fazer a Europa e depois vamos fazer a Oceana Tudo bem. Incrível. Então, temos nosso filtro por região. Legal. A próxima coisa que vamos querer fazer é criar nossos cartões para nosso país. Então, esses serão cartões que terão algumas propriedades, alguns aspectos diferentes. Vamos ver a imagem, vamos obter o nome, a população, a região e a capital Ok, legal. Então, vou criar outro componente para esse cartão de chamada. Digamos que agora, eu só quero ver como fica com alguns dados simulados Então, vou voltar à minha pesquisa por país e vou criar algo chamado, ou apenas uma matriz de sequências de caracteres para dados simulados Então, não vamos fazer dados. Na verdade, vamos fazer uma matriz de objetos. Vamos fazer uma variedade de países. Então, vamos fazer a Alemanha. Vamos fazer o United. Estados da América, e faremos o Brasil exatamente como no exemplo. Tudo bem, legal. Vamos guardar isso então. Agora, o que eu quero fazer, como você pode ver, temos nossa caixa com nosso controle de formulário, nossa entrada e nosso componente de seleção. Queremos sair dessa caixa e depois só queremos percorrê-la. Vamos fazer aqui, vamos simular dados. Então eu quero mapear esses dados simulados para cada país. Quero devolver um de cartão material de cartão de cartão. Guarde isso. Ah, sim. Toda vez que você usa o mapa, você precisa de uma chave. Então, vou definir a chave para ser o nome do país por enquanto. Vamos guardar isso. Tudo bem, legal. Então, se eu for até nosso cartão, devemos apenas, sim, temos três países em nossos dados simulados É basicamente o ciclo do número de vezes que temos o país. Então, temos três cartas. Incrível. Vamos continuar e enfeitar um pouco este cartão Na verdade, tem um componente chamado de cartões diferentes, mas queremos usar um que tenha uma imagem. Talvez o cartão de memória. Acho que essa pode ser a melhor para nós. Então, vou seguir em frente e copiar essas informações aqui. E vamos criar o cartão, salvá-lo e adicionar todas essas importações ausentes. Ah, sim, eu o chamei de cartão. Tudo bem, então vamos importar porque eu chamo o componente real de cartão. Há um conflito porque estamos importando cartões para o material Y. Eu criei algo chamado Então, vou nomear o cartão do cartão deles apenas para que seja diferente e não haja esse conflito. Tudo bem, vou remover algumas dessas peças. Assim como as ações com cartas, não precisamos disso. Estamos literalmente apenas procurando exibir informações. E então, sim, isso deve ser bem decente. A altura da imagem e a largura máxima. Quero que a largura máxima seja talvez 20 de largura de visualização, talvez definamos essa como a largura definitiva, porque devemos ser capazes de caber quatro em 20 de largura E então eu vou realmente voltar aqui e deveria embrulhá-lo em uma caixa. Sim, deixe-me embrulhá-lo em uma caixa. E então eu vou transformar isso em uma caixa flexível. Eu vou dizer isso, incrível, legal. Então, agora eles estão começando a se espalhar. Vamos adicionar mais um país. Vamos fazer a Jamaica. Só para colocar os quatro do outro lado, posso ter uma ideia de como é. E então eu quero justificar o conteúdo. Eu quero espaçar uniformemente, eu acredito. Não há espaço ao redor. Espaço. Espaço entre. Eu quero espaço entre eles novamente. Tudo bem, legal e incrível. Então, sim, temos nossas quatro cartas ali. Todos dizem lagarto agora porque é isso que dizem os dados simulados. Mas vamos trabalhar nisso. Tudo bem, eu só quero retocar esse pedacinho aqui. Não há espaço suficiente entre o cartão e a entrada real, então vou adicionar alguma margem à caixa superior, então vou usar a margem inferior. Perfeito. E depois vou retocar um pouco o cartão. Então, vou definir a altura do cartão real como sendo, digamos, dez alturas de visualização muito pequenas. Talvez 15, talvez dez esteja bem. E então vamos acabar passando algumas propriedades da própria API assim que as obtivermos. Então, acho que somos bastante decentes no estilo geral. Mas há mais uma coisa que eu quero fazer, apenas para nos permitir fazer e trabalhar com o modo escuro. 7. Dark Mode e Zustand: A última coisa que vamos querer fazer para estilizar é trabalhar em nosso modo escuro. Materialmente, eu tenho esse recurso realmente incrível, que fornece um tema padrão que está no modo claro Então, o que vou fazer é realmente tentar direcionar esse tema do modo claro e alternar entre o modo claro e modo escuro, dependendo do modo em que queremos estar Então, vamos esclarecer, vamos aproveitar isso para que nosso aplicativo aqui acesse isso. Ele mora em alguns lugares diferentes. Se examinarmos nosso aplicativo de pontuação de aplicativos, você verá que há algo aqui que está fornecendo o tema, um provedor de temas, e está fornecendo algo chamado tema leve. Então, o tema claro, o tema claro foi criado usando a função de criação de tema aqui. E vamos apenas verificar se nos estilos na pasta do tema, em um arquivo chamado opções de tema leve. Então, se dermos uma olhada aqui, podemos ver isso como um arquivo bem básico e deve ser muito fácil criar uma versão em modo escuro disso. Então, o que vou fazer é copiar tudo isso e criar um novo arquivo, chamá-lo opções de tema escuro e colar. Mas em vez de onde quer que esteja escrito claro, vou mudar para escuro. E tenho certeza que isso vai funcionar. Só vai nos deixar alternar entre escuridão e a luz. Incrível. Então, temos isso acontecendo. A próxima coisa que vou querer fazer agora é basicamente inserir isso no ponto certo. Então, se eu for para o aplicativo, basicamente o que eu quero fazer aqui e não vai estar aqui apenas nesta parte do aplicativo, vai acabar. Então, o que eu estou pensando é que eu quero instalar o Zustand para gerenciar essa parte simples do estado global Poderíamos apoiar Joe o tempo todo, mas acho que isso vai ser um pouco mais limpo Então, se você não está familiarizado com o Zustan, Zustand é como uma alternativa ao Redux , mas muito mais simples Tem muito menos tipos de clichês para começar. Então, procuramos Zustand, é basicamente apenas uma forma de gerenciar o estado Sim, este é o documento, vou instalá-lo muito rapidamente. Então eu vou criar uma loja. Vou criar uma nova pasta chamada store. Vou criar um arquivo lá chamado index TS. O que eu quero fazer é literalmente criar uma loja da Zand. Vou copiar a formatação deles aqui. Ah, e está reclamando do tipo. Vamos consertar isso. Sim, eu quero basicamente criar esse gancho chamado loja, que criará uma loja na possamos simplesmente viver em nosso estado global. Então, eu realmente preciso de dois adereços no modo escuro e, para começar, será falso E então eu quero alternar o modo escuro. O que isso vai fazer é remover isso. É o modo escuro, ele pegará essa parte do estado e depois a configurará para o oposto do que é. Digamos que lá atrás, será o estado oposto ao modo escuro. Quando eu clico em Alternar modo escuro, seja qual for o modo escuro, será o oposto disso Uma última coisa que vamos fazer aqui é adicionar os tipos que vamos criar. Esta é a loja no modo escuro, vai ser uma barra de ouro Em seguida, vamos ativar o modo escuro. Essa será apenas uma função simples que retorna void Então vamos definir loja, loja, estado. Vamos chamá-la apenas de loja. Diga isso e tudo bem, agora corrigimos nosso erro de tipo. Agora podemos acessar essa loja de qualquer lugar em nosso projeto. Então, se eu voltar aos aplicativos X, agora posso me conectar a eles e basicamente acessar o valor de é Stark Boat Então, como vamos fazer isso é copiar essa funcionalidade aqui. Vamos abordar nosso componente aqui, torná-lo um pouco maior. E eu vou ficar constante no modo escuro, você vai para a loja. Vamos importar isso. Oh, você sabe o que, eu esqueci de exportá-lo Certifique-se de exportar a loja caso contrário, você importará a loja errada. Então, vamos exportar a loja e importá-la da loja. E eles vão declarar o modo escuro. Isso é tudo que você precisa fazer para configurar o estado. É super direto, super simples. Se você ainda não viu meu outro vídeo sobre como declarar, fazemos exatamente a mesma coisa. Isso está no projeto para fazer. É muito, muito simples, muito simples de usar Mas então eu recomendo fortemente usá-lo porque, quero dizer, veja a rapidez com que acabamos de configurar o estado. Portanto, com base no fato de estar ou não no modo escuro, quero mostrar o tema claro ou o tema escuro. Então, vou fazer uma verificação rápida aqui. Então, se estiver no modo escuro, eu quero usar o tema escuro. E deixe-me importá-lo e criar o tema escuro. E importe-o, vamos usar o tema escuro. E se não for, então vamos querer fazer tema leve e dizer isso, incrível. Tudo bem, então a próxima coisa que vamos fazer é realmente ligá-lo. Porque agora não está fazendo nada. Certo? Nada está acionando essa Então, se eu voltar para o cabeçalho, quero ir para o botão aqui. E queremos fazer a mesma coisa. Queremos, queremos acessar o botão de alternância, que era esse formato aqui E vamos fazer o Toggle Dark Mode. E vai fazer a mesma coisa. Vamos importar a loja da loja e ativar o modo escuro Nós vamos salvar isso. Incrível. É reconhecer que isso é uma função E então, ao clicar aqui, queremos literalmente ligar para o modo escuro Se conectarmos isso corretamente, quando eu aperto o botão do modo escuro, algumas coisas devem ficar escuras e outras devem permanecer. Se clicarmos nele, incrível. Portanto, não é perfeito porque nós mesmos fizemos muitas personalizações, como acontece com os planos de fundo Mas esse é um primeiro passo muito bom, então sabemos que está funcionando. Agora tudo o que precisamos fazer é conectar as outras peças. Então você verá que esse plano de fundo não muda. Esse plano de fundo não muda, esse plano de fundo não muda e esse plano de fundo não muda. Portanto, temos alguns antecedentes para resolver. Então, se você voltar, ou na verdade, podemos começar aqui, então se pegarmos o modo escuro da mesma loja, esse é o modo escuro e salvá-lo. Então, se eu fizer outra verificação nesta linha aqui. Então, se eu entrar no modo escuro e, se estiver, eu quero que seja. Vamos voltar ao nosso design. Eu quero que seja dessa cor. Então, deixe-me pegá-lo bem rápido. Isso é para o cabeçalho. Na verdade, essa cor é a que eu quero. Eu vou pegar isso. Se estiver no modo escuro, quero que a cor de fundo seja essa. Se não for, eu quero que seja isso. E guarde isso se a ativarmos. Incrível. Funcionando muito bem. Legal. A próxima coisa que quero fazer é mudar isso para o país. Pesquise em todo o aplicativo. Então, isso vai estar aqui em nosso índice. Nós vamos fazer a mesma coisa aqui. Na verdade, podemos literalmente copiar o modo escuro aqui. Cole isso aí. E depois importe a loja, salve isso. Em seguida, vamos mudá-lo para essa cor aqui. Pegue isso aí, aquilo. E então vamos entrar no modo escuro e fazer a pergunta. E nós vamos fazer isso. Será que, se não for, será que vamos guardar isso então. Incrível. Então, se fizemos isso direito, ótimo. Isso muda. Tudo bem, a última coisa que precisamos mudar são esses Toggle, acho que são iguais a essa cor aqui em cima Isso estará em nossa busca por país. Assim, podemos fazer a mesma verificação no Country Search. Guarde isso. Importe isso. Ah, sim. Onde quer que seja FFF Nags, mude esses dois para ter essa cor Aqui está o modo escuro e a mesma coisa aqui, o modo escuro. E definitivamente há uma maneira mais sucinta de fazer isso. Isso é meio que fazer isso rápido, guarde isso. Tudo bem, incrível. Então, se eu mudar o modo escuro agora, funciona bem. Tudo bem, então resolvemos e classificamos o modo escuro para que possamos superar nossos estilos, como pequenas coisas, pequenos ajustes a serem feitos modo escuro para que possamos , pequenos retoques a serem feitos ao longo do caminho, especialmente quando importamos nossas imagens e coisas assim Mas isso é um ótimo começo por enquanto. 8. Usando uma API: Tudo bem, então, se dermos uma olhada nas informações da nossa API aqui, nosso endpoint, ok. Basicamente, podemos pegar todos os países a partir deste único link. Agora, provavelmente vamos acabar filtrando, mas esse é um bom lugar para começar Nós vamos querer pegar isso. Agora, temos que pensar na hierarquia aqui, certo? Temos nossa entrada, temos nosso filtro e temos nosso carro. Está tudo no mesmo componente agora. E isso é feito intencionalmente para tornar isso um pouco mais fácil para nós mesmos O que vamos fazer aqui é, na verdade, dentro do mesmo componente em que faremos nossa busca Agora, em uma configuração mais limpa, podemos começar a separar essas peças, mas, como MVP, podemos começar juntando tudo e obtendo uma versão básica de trabalho forma como vamos fazer isso é na verdade, invocar um efeito de uso. Vamos fazer uma busca a partir dessa API e ela deve estar entre aspas co O que a busca nos permite fazer? Se consultarmos a documentação aqui, fetch nos permite essencialmente receber uma resposta Basicamente, estamos enviando uma solicitação. É um método que usamos para obter um recurso de qualquer endpoint e, em seguida, podemos transformar esses dados em algo utilizável O que vamos fazer aqui é buscá-lo e, em seguida, amarrar um ponto nele Então, vamos dizer buscar. Em seguida, vamos pegar a resposta porque queremos ter certeza nem sempre sabemos se nossa resposta está ou não no formato Json ou se é legível Vamos transformá-lo em Json. Vamos responder para pegar essa resposta e vamos transformá-la em Jon. Tudo bem, agora temos uma resposta de Jason. Incrível. Última coisa que vamos querer fazer, e devemos realmente criar algo para salvar isso. Vamos criar um objeto de dados ou uma variável de dados e vamos definir os dados. Quando isso for feito, usaremos o estado. Os dados serão apenas um objeto vazio. Agora precisamos importar o estado, para que funcione. Sim, nós fizemos isso. Faça, então eles farão mais uma, vestindo , coletando dados e, em seguida, definiremos os dados como dados. Nós vamos salvá-lo. Devemos estar prontos para ir. Uma coisa que eu quero fazer agora é ver se isso realmente funciona. Quero consolar e ver se estamos obtendo nossos resultados. O console aqui. Incrível. Você verá que temos 250 resultados aqui, que é o número de países. E eu só quero, para não criarmos um infilooplet deixe-me atualizar a página que Tudo bem, e vamos passar uma matriz vazia aqui para parar o loop infinito. Então, se apenas atualizarmos Incrível. Então, aperfeiçoamos nossos dados. Então, se olharmos para um dado individual aqui, se olharmos para um país individual , descreverei o primeiro, então veremos que temos muitas informações aqui. Tudo bem, então esses são Turks e Kakos. Você verá que há uma tonelada, tonelada de informações. Agora, não queremos exagerar na busca de dados porque serão consultas muito caras Então, o que podemos fazer, como diz a API aqui, podemos simplesmente buscar os campos de que precisamos Então, podemos fazer todos os campos de ponto de interrogação e, em seguida, igualar qualquer campo que precisarmos Então, sabemos que provavelmente precisamos da bandeira, precisamos da população, precisamos da região, da capital E precisamos do nome seguindo o formato dessa estrutura de dados aqui. Na verdade, podemos alterar nossa consulta, nossa busca na linha 25 aqui Então, faremos tudo e, em seguida, usaremos campos iguais, para garantir que estamos fazendo a coisa certa Sim, os campos são iguais, e depois vamos separá-los com vírgulas Tudo bem, legal. Então, faremos campos iguais Precisamos de bandeiras, precisamos de capital, precisamos de população e precisamos de região. E vamos guardar isso. E acho que é tudo o que precisamos. Portanto, se atualizarmos, ainda devemos obter 250 resultados Pegue todos os países, mas se você ver os dados já são muito menores. Nós obtemos o capital, obtemos as bandeiras e os formulários PNG e SVG Pegamos o nome, a população e a região. Incrível. Então, já estamos recebendo muito menos dados, o que tornará nossas consultas muito mais fáceis Perfeito. Então, a próxima coisa que vamos querer fazer agora, na verdade, é dar mais uma olhada. Você notará, na verdade , que os dados estão em uma forma muito interessante. A capital está, na verdade, dentro de uma matriz. Então, queremos basicamente passar esses dados para nossos cartões, certo? Queremos que isso passe direto em nossas cartas. Vamos querer absorver todas essas informações. Sim, vamos fazer assim. Nós vamos passar, depois vamos passar a bandeira. E isso vai ser bandeira, opa, país. Bandeira. E então vamos ultrapassar a população, que será apenas a população do país. E então vamos passar na região. E isso vai ser a região do país, depois vai ser o nome do país.com Tudo bem, então o que estou fazendo aqui? Certo, estou criando todos esses erros. Então, esses dados, que na verdade, usaremos nossos dados reais em um segundo, serão mapeados em cada país. Então, para cada país que queremos conquistar, e eu vou mudar, na verdade, o nome que vamos querer conquistar o país. E então queremos entrar no nome que nos é fornecido. E queremos pegar o nome comum porque o nome comum é o nome que vamos usar. Você também pode usar o nome oficial, mas às vezes o nome oficial não é o nome que seu usuário pode pesquisar. Então, descobri que o nome comum baseado na API é um pouco melhor. Então queremos pegar a bandeira, certo? A bandeira é a imagem real, a localização da imagem que eles enviaram para uma CDN Eu vou usar o PNG por enquanto. Poderíamos mudar o SVG se quiséssemos. Depende totalmente de você, mas vamos pegar a bandeira e essa será a nossa bandeira Também queremos conquistar a população e a população , na verdade, não está aninhada É como se estivesse ali como um número. Então, podemos simplesmente pegar a população de pontos do país e pegá-la. Vamos conquistar a região. A mesma coisa que apenas uma corda. Então, vamos pegar essa região. E então a chave será apenas o nome da chave será o nome do país. Country.name.com porque cada país deve ter um Awesome.com. Incrível. Então, o que vamos fazer agora é passar isso para o nosso cartão e basicamente configurá-lo para que ele possa receber todos esses dados. Então, vamos criar uma interface aqui. Isso é só para que possamos definir nosso adereço, temos o nome que será uma string Temos a região, que também será uma corda. Temos a população, que também será uma string. Temos a bandeira, que será uma corda. Oh, você sabe o que, na verdade, esquecemos a capital Também precisamos do Capitólio. E essa é interessante. Então, na verdade, será a faixa zero do Capitólio do País. Será a primeira string nessa matriz. O primeiro objeto nessa matriz, que é uma string, será o Capitol Isso também vai ser uma corda. Salve a bandeira da população dessa região. Acho que tenho tudo. Tudo bem E então eu vou passar isso aqui, então nomeie a região, a população, a bandeira, a capital. E eu vou passar adereços. Vou até o tipo de adereços e guardo isso. Tudo bem, legal. Então , temos isso funcionando. A próxima coisa que eu provavelmente vou querer é trocar isso por dados, porque isso está me causando muitos erros Dados. Ah, e você sabe o que, é, oh, está me dando um erro porque não é do tipo array. Então, na verdade, precisa ser uma matriz de objetos. Então, por ser uma matriz de objetos , provavelmente também me deu erros porque eu os configurei, basicamente inicializei um tipo disso Eu poderia simplesmente criar um tipo comum, como um país. Eu não preciso passá-lo entre os dois. Se eu criar outra pasta, eu crio tipos, vou para o indexador de arquivos Então, cada país terá um nome que é uma string. O nome será, o nome é uma propriedade comum que será a string. E então teremos uma bandeira que terá uma string de propriedade PNG. E então teremos uma população que será um número. E eles terão uma região que será uma corda. E teremos uma maiúscula, que será uma matriz de strings. Tudo bem, se eu posso importar, se eu exportar o tipo de país, vamos ver se isso funciona e eu importo. Para importar? Não, não, ele ainda quer um tipo básico. Tudo bem, então, oh, talvez funcione, na verdade. Ok, legal. Então, vamos apenas criar o objeto aqui e inicializá-lo. Nosso nome será uma string. O nome será comum, terá uma propriedade comum que será do tipo string. Basicamente, o que isso está procurando é como um valor inicial antes da busca da API O que vamos fazer é entregá-lo a ele. Ele quer saber se ok flags PNG ainda não retornou nada. O que queremos que seja até obtermos uma resposta? Então, vamos digitar sinalizadores e, como sabemos pela nossa API, podemos até mesmo ver nossa resposta inicial Na verdade, acho que não entendi, mas sabemos que Flags tem uma propriedade PNG e vamos inicializá-la para ser uma string vazia por enquanto E então vamos seguir a linha e fazer a mesma coisa. Então, vamos para a capital. O capital será uma matriz. E será uma matriz vazia. Ou uma matriz com uma string, por enquanto, pode ler maiúsculas. Na verdade, talvez o país. Deixe-me remover esse tipo. Ok, vamos lá. Fazendo melhor. Oh, eu porque eu escrevi errado. Capital, diga isso. E população, contagem da população. Oh, eu só preciso adicioná-lo. Então, adicionaremos a população a zero e faremos com que a região seja uma string vazia. Tudo bem, incrível. Então, acho que nos livramos de todos os nossos erros de tipo. Legal. Então, estamos obtendo tantos resultados que nem conseguimos exibir todos eles. Precisamos ter o envoltório flexível ou algo parecido para não obtermos tantos resultados Tudo bem, então podemos nos livrar de nossos dados simulados aqui porque não precisamos mais deles Guarde isso. Que outro erro podemos corrigir aqui? O número do tipo de população não pode ser atribuído ao tipo stream. Oh, é um tipo de string? O tipo é uma faixa aqui, então na verdade é o número do intervalo. Legal. Isso é ótimo sobre o script de tipos. Quero dizer, ele encontrará esses pequenos erros e garantirá que você não os cometa em todo o projeto, mas tudo bem, então deixe-me criar uma embalagem nesta caixa. Incrível, vamos lá. Então, temos todos os nossos países, deveria haver 250 caixas. O que vou fazer agora é realmente utilizar esses dados nos próprios cartões reais. Esperamos que nosso componente de cartão forneça apenas um pouco de margem na parte inferior para que fique um pouco melhor Onde diz lagarto, vamos mudar esse nome. Vamos dar uma olhada, na verdade, parece muito pequeno. Vamos para o, o tamanho da fonte deve ser como um carneiro. E vamos alterar o peso da fonte para cerca de 700 porque parece muito em negrito Vamos dizer que temos nossos nomes. Então precisamos da população, da região e do Capitólio. Tudo bem Usando nosso corpo dois. Vamos, eu vou usar a etiqueta, então são apenas as etiquetas normais da tigela que vou dizer à população, então vou copiar e colar isso. A próxima foi, acredito, uma região. A região e a capital estão apenas digitando uma capital tão incrível. Então, finalmente, queremos acessar a imagem, então vamos apenas digitar a bandeira aqui porque essa será nossa fonte PNG. Incrível. Basicamente, com alguns adereços simples que transferimos do nosso país a partir da API Nós literalmente os passamos para nosso componente de cartão e depois os acessamos da mesma faríamos com adereços ou em qualquer outro lugar, e os exibimos em nosso aplicativo Nosso aplicativo está 50% pronto, talvez mais. Fizemos como nosso tipo inicial de teste com a API e a lógica de lá. Então , está indo muito bem. Agora, a próxima coisa que vamos querer fazer é sermos. Tudo bem, então temos nosso aplicativo todo formatado e estilizado, mas a próxima coisa que vamos querer fazer é realmente adicionar alguma lógica, Porque agora, se digitarmos qualquer coisa que digitamos na França, absolutamente nada acontece. Então, queremos adicionar essa lógica e faremos isso na próxima seção. 9. Adicionando lógica de pesquisa: Tudo bem, então a próxima coisa que temos fazer agora é colocar essa lógica para garantir que quando alguém digitar em um país, na barra de pesquisa aqui em cima, ele realmente retorne uma resposta. No momento, não fazemos absolutamente nada. Não há filtragem acontecendo em nenhum desses resultados. Então, vamos prosseguir e implementar isso agora. Tudo bem, então vamos começar com isso porque queremos basicamente filtrar todos os países que temos como opções, a partir de nossos dados, de nossa chamada de API. Tenho certeza de que, bem, uma maneira de fazer isso é por meio de solicitações de API. Mas, na verdade, podemos simplesmente filtrar isso no lado do cliente, com base nos dados que já recebemos de volta, já que é uma chamada de custo muito baixo em relação a, você sabe, um aplicativo maior que está buscando toneladas e toneladas de megabytes de O que eu quero fazer aqui é acessar a pesquisa por país e vamos fazer isso dentro desse componente. O que eu quero fazer aqui criar uma variável chamar os países filtrados e quero defini-los Eu quero inicializar isso como dados. Quaisquer que sejam os dados, é o que os países filtrados serão Isso vai ser o que vamos percorrer. Se eu mudar os dados para serem países filtrados, vamos deixar isso por enquanto, certo? Tudo bem, então sim, os países filtrados serão o que percorreremos, mas precisamos configurá-los, então precisamos inicializá-los Quando digitamos aqui, queremos que algo aconteça, queremos que algum tipo de F aconteça. Podemos acessar isso usando o suporte on change no campo de texto Queremos basicamente algo como filtrar países. Filtrar países, filtrar países. Sei que vou querer passar no evento porque vou precisar direcionar esse valor para lá. Vamos criar esses países filtrantes, países filtro constante synovus E, passando esse evento , diremos que queremos definir os países filtrados como B. Queremos filtrar os países e queremos filtrá-los Queremos filtrar cada país pelo nome do país, país. E faremos isso em letras minúsculas para ter certeza de que estamos realmente obtendo o mesmo valor. Vamos transformar os dois. Queremos ver se o, o nome comum do país em minúsculas, se inclui algo valor alvo para minúsculas, é o mesmo. Não haverá nenhuma incompatibilidade e isso deve funcionar. Estamos recebendo esse erro porque precisamos atribuir a ele um tipo frio e filtrado de países Tudo bem, então eu estou realmente chamando a função, tudo bem. Tudo bem, agora temos a configuração. Então, ele está filtrando os países filtrados para ver se esse é o valor Tudo bem, e então o que queremos fazer agora, queremos devolver isso, queremos mostrar isso, queremos mostrar países filtrados em vez de dados e dizer isso E acho que, sim, estamos recebendo um erro aqui. Basicamente, estamos apenas obtendo o padrão porque precisamos esperar por esses dados. O que queremos fazer é definir países filtrados aqui Então, queremos definir dados, então devemos definir países filtrados Então, talvez consigamos nos livrar dos dados. Certo. Ok. E então ele faz isso automaticamente. Tudo bem, perfeito. Então, filtramos os países. Então, agora, se eu digitar na França, incrível. Então, está procurando pela França. Então, vamos revisar o que fizemos aqui. Então, criamos essa função chamada filtrar países. Ele define os países filtrados como o que são, então inicializa os dados e, em seguida, queremos filtrar por cada país e pesquisar o país, o nome do país, o nome comum Estamos transformando esse nome comum em minúsculas e verificando se esse valor de string inclui o que estamos digitando em nossa barra de pesquisa Então, se eu digitar, você sabe , acho que também precisamos corrigir alguns erros. Mas se eu atualizar, funciona bem. Então, você notará que já existem alguns erros que precisam ser corrigidos. Mas o conceito inicial está funcionando, então estamos indo na direção certa. Tudo bem, então um erro que acabamos notar é que, se não há nada lá, ele não o reinicializa. Então, vamos ver se podemos fazer um FL para defini-lo como o valor correto. Então, poderíamos dizer que se o valor-alvo for igual a isso, se for igual a uma string vazia, queremos definir os países filtrados como saltos de dados, caso contrário, queremos definir os países filtrados como o que fizemos filtrados como o Tudo bem, digite isso e depois, sim. Ok, legal. Então, se eu voltar para o espaço agora, ele funciona. Incrível. Esse é um erro que corrigimos. A próxima coisa que vamos querer fazer filtrar por país, mas no momento não podemos filtrar por região. Então, queremos adicionar a capacidade de filtrar por região também. Assim, podemos realmente começar a utilizar esse tipo de alteração de identificador incorporada que foi incluída em nosso elemento de formulário. Podemos simplesmente alterar o valor para região e vamos mudar isso para região, então vamos aproveitar a região inicial definida. Tudo bem, legal. Sim, podemos basicamente utilizar esse evento de mudança de identificador para definir nossa região. Agora, quando escolhemos uma região diferente, ela deve ser configurada automaticamente. O problema aqui é que agora precisaremos filtrar por região e filtrar por país. Então, precisamos pensar em como vamos fazer isso de uma forma lógica. Tudo bem? Acho que o que eu quero fazer aqui é uma combinação de coisas. Quero criar outro manipulador. Então, vou criar a digitação de identificadores e isso exigirá um evento Vou criar outra variável, valor de pesquisa constante. Isso será o que eles digitarem nessa entrada. Vou criar uma variável para manter isso. Vou começar com um identificador de string vazio digitando que pesquisa será definido como valor alvo E então eu vou chamar isso, eles digitam quando alguém digita no aplicativo. Então, vai fazer isso. Incrível. E vamos ir mais longe. Parátipos. Incrível. Legal. Agora que temos esse valor de pesquisa armazenado para que você possa acessar em mais de um lugar, esse filtro de países pode acabar se transformando. A próxima coisa que quero fazer é inserir efeito de uso ou um memorando de uso Quero verificar a região, quero verificar a região e talvez verificar o filtro também. Então, deixe-me começar com um memorando de uso. E o que vou fazer é criar uma matriz vazia chamada países. E eu vou então fazer uma verificação se a região não é igual a string, certo? Portanto, sabemos que a região está começando como uma válvula de cadeia vazia. Se não for uma string, queremos fazer alguma coisa, certo? Se a região não for igual a uma string, queremos definir os países como dados. Ou são dados de filtro? Dados. Filtre por país então. Se esse país, região igual a região, legal Sim, queremos verificar, queremos basicamente definir esse conjunto de países para ser qualquer dado que tenhamos. Sim, os países serão. Pegando os dados, todos os dados que obtemos da APA, vamos filtrá-los por país. Se esse país tiver uma região que corresponda à região que definimos, ela entrará na variável desse país. Legal. Em seguida, queremos definir os dados filtrados, mas também queremos considerar o que definimos nos dados filtrados, como a forma como o texto e o bit de digitação entram nisso Deixe-me pensar sobre isso por um segundo. Tudo bem, então basicamente queremos passar por uma lógica similar. Então, se a região fizer isso, queremos verificar o valor da pesquisa. O valor da pesquisa não é igual a uma string vazia, então queremos fazer essa verificação, queremos definir os países filtrados para serem basicamente isso, certo? Queremos fazer isso, mas aqui embaixo, então vamos pegar países, exceto isso. Então, em vez do valor do ponto alvo, será o valor da pesquisa. Eu vou guardar isso. Não é certo que funcione porque basicamente pegamos o valor do ponto-alvo e o salvamos como valor de pesquisa. Ok, legal. Então, temos dois, se provavelmente precisarmos que valor de pesquisa de outra pessoa esteja definido, região não é nula, certo? Queremos que os países filtrem isso. Se o valor da pesquisa não for nulo, queremos filtrar os países Mas se o valor da pesquisa for nulo, queremos apenas definir os países filtrados como países , certo, sem filtragem extra A região é igual. Nada como se não houvesse uma região, então queremos fazer uma verificação semelhante aqui, certo? Basicamente, queremos fazer isso de novo , mas depois definir isso como data. Acho que sim, configurá-lo para dados, mas em vez disso, queremos definir os países filtrados e vamos fazer isso com dados, acredito que seja o país filtrado pelos dados Faremos isso em arquivo. Se o valor da pesquisa não for nulo, pegaremos os países filtrados e depois os filtraremos. Caso contrário, definiremos os países filtrados como dados, a região, se não houver uma região definida, mas se o valor da pesquisa não for nada, ainda queremos filtrar pelo Isso é algo que podemos simplesmente perder a função do país de filtro porque, na verdade, não é tão útil. Mas se a região for, o valor da pesquisa também é uma string vazia Queremos definir os países do filtro como dados. Isso deve funcionar. Só precisamos adicionar nossa dependência. Portanto, deve ser a região dos dados região dos dados e o valor da pesquisa. Guarde isso. Eu acho que isso deveria funcionar. Eu acho que isso deveria funcionar. Vamos tentar. Vamos para a França. Mas vamos lá e depois vamos tentar filtrar por escopo de alcance. Europa, ok? A América está bem. África. Sim. Tudo bem Então, funciona muito bem. Legal. Legal, legal, incrível. Tudo bem Legal. Então isso funciona muito bem. Então, a próxima coisa, sim. Então, a próxima coisa que vamos querer fazer, acho que o que vou querer fazer agora é configurá-la. Eu queria que tudo funcionasse. Basicamente, quero que você possa redefinir a região porque, no momento , sem tudo, você só pode configurá-la. Você não pode desativá-lo, certo? Você não pode redefini-lo se estiver definido como tudo, para que ele também retorne toda a região. Se eu fizer região igual a região igual a igual, tudo funciona, não, não funciona O que vou fazer aqui, na verdade, é apenas alterar o valor de all para ser uma string vazia para que, quando eu for para a África, América, Ásia e depois volte para tudo, ela simplesmente retorne de uma string vazia. Muito simples, limpo, conserto, legal. Vamos ver o que mais está lá. Há mais alguma coisa que eu possa fazer aqui? Acho que a única coisa que resta a fazer aqui é provavelmente limpá-lo um pouco. Diz que quer países filtrados como dependência, mas não sei se vai funcionar se eu fizer isso Deixe-me dizer isso e depois tentar. Oh, espere, desculpe. Eu não sou. Sim, não, ele quebra se eu fizer isso. Sim, então eu não quero fazer isso. Eu só vou deixar isso de fora. Vou apenas desativar as dependências exaustivas desta linha Legal. Acho que realmente usamos países filtrantes? se eu comentar isso e removê-lo daqui, os aplicativos funcionarão? Oh, isso é um bug. Isso não acontece. Tudo bem, então eu não acho que nós realmente, eu não acho que realmente precisamos de um país de filtro. Então, eu vou me livrar dela e vou me livrar da coluna que está aqui. Ele será substituído pela digitação de identificadores, que basicamente pega esse valor alvo e apenas fornece uma variável que corrige o problema Uh, o que mais? O que mais podemos fazer aqui? Oh, podemos acabar com essa lei do console. Não precisamos mais disso. Então, pelos dados, sim, essa pode ser a solução. Ok, essa foi a solução. Então, eu estava recebendo esse erro em que, se eu digitasse algumas letras e fosse para uma região, se eu voltasse para todas, não estava classificando Então isso é porque eu erroneamente, eu cometi um erro. Eu deveria ter dito dados na linha 60 ou deveria ter dito países filtrados, que é o que estamos filtrando na linha 60 para realmente serem Então, vamos usar apenas dados, não vamos usar países filtrados Vamos usar países filtrados , mas não nesse momento Incrível. Acho que temos tudo o que precisamos aqui. Acho que estamos praticamente prontos para sermos legais. Acho que outras coisas que você poderia fazer com este projeto é torná-lo responsivo para dispositivos móveis Então, para fazer isso, você sabe, se transformar em uma espécie de visualização suspensa que eles têm aqui como opção Você sabe, qualquer filtro por região e é apenas um país após o outro e crie uma versão móvel. Esse seria outro projeto interessante de se fazer. Você poderia retocar o modo escuro, você sabe, obter um ícone melhor que esteja um pouco mais alinhado com o design. Um monte de coisas que você ainda poderia fazer se quisesse neste projeto. Depende totalmente de você, se você quiser continuar com isso. E então você também pode adicionar uma espécie de página individual aqui para cada país que, na verdade apenas exibe suas informações lá. Então, ainda há muito a ser feito com este projeto, mas sim, espero que tenha sido útil para você e você realmente tenha aprendido a usar uma API com a pesquisa de países e possa trabalhar com APIs no futuro e incorporá-las em seus projetos futuros 10. Conclusão: Falamos muito neste vídeo, desde as origens do react até a criação seu próprio aplicativo de pesquisa de países totalmente funcional. No futuro, você deve ser capaz de lidar com qualquer projeto de API que surgir em seu caminho. Lembre-se de pesquisar algo quando não tiver certeza e vasculhar o stack overflow Eu adoraria ver como você decidiu implementar seu aplicativo web. Portanto, deixe um link para seu código ou para o site hospedado na guia Projetos e Recursos para que eu possa ver todo o trabalho árduo que você fez. Eu leio todos os comentários, todas as avaliações e vejo cada envio de projeto. Portanto, se você tiver alguma dúvida, sinta-se à vontade para deixar um comentário na seção de avaliações abaixo ou entrar em contato comigo diretamente. Confira minha página de perfil para obter mais informações sobre isso. Se você quiser saber mais sobre programação, confira os outros vídeos que tenho na minha página de perfil Também tenho vídeos em HTML e CSS disponíveis no site do meu canal no Youtube. Vou vinculá-los abaixo e no meu perfil se você também estiver interessado em aprender esses idiomas em aprender esses idiomas. E eu vou ver na próxima.