Aprenda React: crie um aplicativo web usando Next. js, Material UI e TypeScript | Zoë Davidson | Skillshare

Velocidade de reprodução


1.0x


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

Aprenda React: crie um aplicativo web usando Next. js, Material UI e TypeScript

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

      0:31

    • 2.

      Projeto do curso

      0:33

    • 3.

      Por que Reagir?

      1:08

    • 4.

      Componentes

      0:48

    • 5.

      Adereços e estado

      0:36

    • 6.

      Crie aplicativo React

      0:56

    • 7.

      TypeScript

      0:41

    • 8.

      Next.js

      0:27

    • 9.

      Estilizando o aplicativo

      26:22

    • 10.

      Adicionando um estado global

      30:15

    • 11.

      Conclusão

      1:01

  • --
  • 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.

221

Estudantes

4

Projetos

Sobre este curso

Este curso ensinará tudo o que você precisa saber para escrever React usando Next.js, de conceitos iniciantes a avançados:

  • O que React é
  • Como usar componentes e estado
  • Como trabalhar com Next.js
  • Como criar um aplicativo ToDo

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

Este curso é para qualquer um que já teve interesse em aprender a programar ou está olhando para enfrentar uma entrevista técnica em um futuro próximo.  Seu projeto de curso será criar seu próprio aplicativo ToDo usando React e Next.js. 

Este curso incluirá um guia passo a passo sobre como aprender React a partir do zero.

  • Como usar React
  • O que faz uma biblioteca diferente
  • Como construir um componente
  • Como usar state

Depois de fazer o estágio, deixe uma avaliação sobre o que você achou!

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 em mesa de equipamento pequeno
  6. Sennheiser MKE 600
  7. Braço de microfone 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 e stand de expresso (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á ouviu falar de uma das bibliotecas de front-end mais populares do mundo, a React? Hoje, veremos tudo o que você precisa saber para criar seu próprio projeto usando o React. Incluindo como criar esse aplicativo para fazer. 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 e outras tecnologias. Ao final deste curso, você poderá fazer isso sozinho. Vamos começar. 2. Projeto do curso: Projeto de classe. O projeto dessa classe é criar um aplicativo para fazer totalmente funcional. 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 java script 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 materiais para alguns estilos e componentes básicos Um salto vincula todos os ativos e recursos que você precisará na guia Projeto e recursos 3. Por que Reagir?: Por que reagir? Se você já está familiarizado com o react, pode pular para as aulas tutoriais Mas nas próximas lições, veremos qual problema o React foi criado para resolver, como ele é usado e como executá-lo. React foi desenvolvido no Facebook e lançado ao público em 2013. Ele foi criado inicialmente para lidar com recarregamentos e atualizações ineficientes de páginas que, na época, exigiam que todo o Dom ou o modelo de objeto do documento fossem repintados cada atualização, o React, corrige esse problema criando o que eles chamaram de Dom virtual, uma representação do Dom na memória. Isso permitiu que o React atualizasse apenas os aspectos ou componentes do Dom que foram alterados, e não a página inteira, resultando em melhor desempenho. O React mudou o jogo no espaço de desenvolvimento web e ainda é uma das bibliotecas mais populares do mercado Devido ao uso de componentes, os desenvolvedores agora podem escrever código modular com muito mais facilidade, o que lhes permite desenvolver com mais eficiência e eficácia. Outros frameworks populares que são frequentemente comparados ao react incluem View e Angular 4. Componentes: Componentes. Os componentes são trechos de código reutilizáveis que o React aproveita para manter sua modularidade Pense neles como os blocos de construção que os desenvolvedores usam para criar aplicativos. Um componente é um trecho de código independente e reutilizável que encapula sua própria funcionalidade, Esses componentes podem ser considerados como uma combinação de HTML e Javascript ou JSX, que é usada no Cada componente pode ter seu próprio estado, que representa dados que podem mudar com o tempo, e um conjunto de propriedades ou adereços que permitem que os componentes principais transmitam dados aos filhos Assim como o HTML tem elementos dentro de outros elementos que reagem, tem componentes dentro de outros componentes. Esses componentes internos são considerados filhos dos componentes externos. 5. Adereços e estado: Adereços e estado. Para realmente entender e usar o react ao máximo, precisamos falar sobre estado e propriedades Ou, como são chamados, adereços. Vamos dar uma olhada em um componente da bacia. Esses componentes estão, na verdade, apenas em suas funções básicas. Eles podem receber argumentos, modificar variáveis e retornar um valor. Mas, simplesmente falando, podemos pensar em props como os argumentos que são passados por nossa função quando ela é chamada e state como as variáveis locais que só existem em nosso determinado componente Expandiremos essa definição posteriormente, mas é importante entender como ela funciona primeiro. 6. Crie aplicativo React: Crie um aplicativo de reação. várias maneiras de configurar um aplicativo de reação. Neste curso, abordaremos dois dos mais populares. A forma original de configurar um aplicativo de reação era usando o CRA ou criando um aplicativo de reação aplicativo Create react também foi desenvolvido no Facebook para remover grande parte dessa complexidade e transformá-la em um comando simples, mas poderoso. Ao usar o aplicativo create react, você economizará horas de dor de cabeça ao tentar configurar um novo aplicativo react pela primeira vez. Para executar, crie o aplicativo react. Basta inserir px, criar o aplicativo react, seguido pelo nome do seu aplicativo no terminal e pressionar enter. Depois de alguns minutos, você estará pronto para começar. Você pode executar o comando sozinho em seu terminal se quiser ver como é a aparência do aplicativo create react. No entanto, eu o alertaria contra usá-lo para criar seu projeto, pois ele não está mais sendo mantido. Em vez disso, sugira o uso de estruturas ou ferramentas como Next S ou Vet Usaremos o próximo S para criar nossas tarefas. 7. TypeScript: datilografado. Em vez de usar Javascript em nosso aplicativo de tarefas, usaremos texto datilografado O texto datilografado é, na verdade, apenas um superconjunto de Javascript. O que isso significa é que ele é construído de e, em última análise, compilado em Javascript. Mas ele tem alguns recursos adicionais que o Javascript não nos fornece imediatamente. datilografado nos permite usar digitação estática em vez de dinâmica Detecte muito mais erros ao escrever nosso código, vez de em tempo de execução Ele desenvolve automaticamente um nível de documentação para seu projeto. É um pouco diferente do Javascript, mas vamos analisá-lo juntos, passo a passo, ao longo do nosso tutorial. Se você pode escrever Javascript, tenho certeza de que pode escrever Typescript 8. Next.js: Next S Nos anos que passaram desde que o aplicativo create react foi introduzido pela primeira vez, muitos frameworks foram construídos e desenvolvidos a partir dele Uma estrutura muito popular hoje em dia é o Next JS. Next GS fornece muitas otimizações prontas para uso, como roteamento de renderização de serviços e SEO aprimorado E, como tal, é o favorito dos desenvolvedores de front-end. Vamos usá-lo em nossos projetos, então vamos nos aprofundar e começar. 9. Estilizando o aplicativo: Tudo bem, então vamos começar. Então, a primeira coisa que vamos querer fazer é instalar o pacote que estamos usando. Na verdade, vamos usar esse modelo aqui que nos permite criar um aplicativo que tenha o próximo S Material, interface do usuário e o script de texto juntos ao mesmo tempo. Se você instalasse isso manualmente, um por um, começando com o próximo JS e depois instalando-o, material I e script de tipo, demoraria um pouco mais para configurar. Então, estamos apenas usando esse modelo como um atalho para economizar algum tempo com o tutor Então, o que vou fazer aqui para utilizar isso é deixar o link para esse repositório específico do Github na guia de projetos e recursos abaixo na guia de projetos e recursos Então, vou passar para o lado direito aqui, onde está o botão verde. Vou apenas copiar a URL do projeto. E então eu vou para a pasta de desenvolvimento e vou cloná-la em uma pasta que vou chamar para fazer Então, vamos fazer isso e depois é incrível. Então está criado, deixe-me ir para minha pasta de tarefas agora. Documentos, desenvolva-os e faça-os. E então vamos abrir isso no código VS. Tudo bem, incrível. Agora que tudo está no código VS, devemos estar prontos para começar. Agora, o que vamos fazer é usar o NPM para instalar os pacotes com os quais estamos trabalhando Porque embora tenhamos nosso pacote em Json, sobre o qual falamos antes, ele tem todos esses pacotes que ainda precisam ser instalados para que possamos usá-lo Então, vamos começar com isso. Então, vou começar abrindo um novo terminal. E você verá que ele já inicializado como um repositório Git Esse é um recurso do próximo S. Ele nos permite basicamente fazer com que todas as coisas que teríamos que fazer uma por uma, basicamente feitas para nós. Vamos em frente e vamos digitar NPM I para instalar e deixar que seja instalado E, como você verá no canto superior esquerdo aqui, uma pasta chamada módulos de nós acaba de aparecer E isso é basicamente o resultado da instalação de todos esses pacotes. São todas as informações que o projeto precisará para funcionar. Então, você verá que instalamos módulos de nós lá, alguns erros , mas não vamos nos preocupar com isso. E então vamos seguir em frente e executar NPM start para iniciar nosso projeto Estamos recebendo um pequeno erro aí. Oh, você sabe o que, nós precisamos executar o NPM, executar o dev. Isso é o que é. Tudo bem, desculpe, comece a empreender. Dois comandos diferentes. Então, vamos até a direita aqui e, se tivermos feito as coisas corretamente, o host local 3.000, conforme dito em nosso terminal, devemos ser capazes de, sim, começar Então, temos nosso próximo S funcionando e girando. Estamos usando o material Y e estamos usando o script de tipo. Então, basicamente, vamos começar a desenvolver e criar nosso aplicativo de tarefas para que possamos nos concentrar nas coisas que importam. Tudo bem, então o aplicativo para fazer que vamos criar, se você apenas pesquisar no Google um, você sabe, você basicamente quer criar algo, você sabe, com qualquer aplicativo para fazer. Você quer criar algo parecido com uma lista de tarefas. Você sabe, alguma forma de marcar o que você está fazendo e alguma forma de excluir o que você está fazendo. Um que eu criei no passado e depois vamos modelar isso é este aplicativo para fazer aqui. Então é por isso que estamos nos esforçando. Queremos fazer um aplicativo que, ao adicioná-lo ao Do, possamos adicioná-lo à lista. Você sabe, apenas pressionando Submitter, pressionando Enter, podemos marcá-lo e, você sabe, talvez ter algum estilo Podemos excluí-lo se quisermos. E então, se adicionarmos isso para fazer e atualizarmos a página, queremos que ela permaneça correta Não queremos que ele desapareça porque queremos poder usar esse aplicativo para fazer da mesma forma que nosso aplicativo pessoal de tarefas pelo tempo que quisermos. Então, há algumas coisas que teremos que fazer para que funcione assim. Mas usaremos isso para fazer o aplicativo como referência, caso precisemos de ajuda no futuro. No momento, porém, temos esse aplicativo. Os próximos kits iniciais S. Vamos seguir em frente e nos livrar de tudo o que não precisamos usar para entrar em nosso projeto de código VS Aqui eu vou entrar em páginas. A forma como o next S funciona é que ele realmente estrutura seu aplicativo em termos de páginas. Como estamos na página inicial do aplicativo, modificaremos esse arquivo de índice, conforme falamos anteriormente Temos JSX, que é Javascript misturado com Javascript XML. Isso é S, que é apenas a versão datilografada da mesma coisa que mencionei Se você não está familiarizado com o Typescript, ele é muito, muito semelhante ao Javascript Eles são basicamente a mesma coisa. Typescript é apenas Javascript com tipos, e abordaremos isso enquanto trabalhamos em nosso projeto Então, a primeira coisa que queremos fazer é esclarecer tudo isso no meio. Então, vamos limpar tudo, do Maine até o rodapé, e nos livrar disso Só queremos uma folha em branco e vamos mudar o título aqui para fazer o melhor. Então, como você verá à direita, não temos nada acontecendo, então sabemos que fizemos nosso trabalho corretamente. Nós o limpamos. Também vou me livrar dos estilos aqui, só para que possamos realmente começar do zero Tudo bem, então vamos dar uma olhada em nosso aplicativo novamente. O que nós queremos fazer? Bem, acho que vamos precisar criar vários componentes diferentes aqui. Então, precisaremos ter esse tipo de componente maior que hospede o plano de fundo. Talvez você possa simplesmente adicionar o plano de fundo ao corpo, mas então teremos esse contêiner aqui que realmente contém o real para fazer por si só. Mas parece que temos um cabeçalho aqui que poderíamos nomeá-lo. Arte para fazer, lista ou qualquer outra coisa, mas por enquanto é só para fazer. E então temos essa entrada que está vinculada ao envio e a própria ação. Portanto, há alguns componentes que queremos criar. Pense em criar aqui. Vamos começar definindo o estilo do plano de fundo primeiro Acho que o que fizemos aqui é um gradiente linear. Então, acho que é isso que provavelmente farei nossos projetos também. O que vou fazer para entender isso é pesquisar a semântica do gradiente linear E sim, é isso que eu quero fazer. Eu quero pegá-lo como cor de fundo ou basicamente torná-lo o plano de fundo. Então, vou voltar para o aplicativo e depois vamos experimentá-lo em nosso div aqui e ver se funciona Se cobrir a página inteira , será um gradiente linear e só teremos que resumir essa citação Isso é CSS embutido, caso você nunca o tenha usado antes. Basicamente, isso nos permite escrever nosso CSS dentro do próprio elemento. Então, só precisamos ter certeza de que isso acontece. Sim. Oh, você sabe, desculpe, eu coloquei a citação no lado errado. Aí está. Legal. Então, vamos dar uma olhada no que isso nos deu. Mãe, ele. Ah, e vamos adicionar alguma textura para que possamos ver que estamos trabalhando no arquivo certo. Tudo bem Para fazer algo incrível. Então, isso está nos dando um gradiente linear, mas não está cobrindo a página inteira Então, mais uma etapa que vou adicionar a esta página. Basicamente, quero que a página ocupe toda a página visível. Portanto, há uma propriedade chamada altura da visualização que você pode realmente usar para obter 100% da visualização, a altura da visualização que você está usando. Então, definiremos a altura 100 VH com suportes para a altura da visão E vamos salvar isso. E lá vamos nós. Temos nossa página ocupando o plano de fundo, ou pelo menos nossa página inicial, ocupando a página inteira. Isso é ótimo. Mais um recurso que vou adicionar a esse estilo de gradiente linear aqui é uma curva Então, vou adicionar uma volta de 0,125. E isso só vai virar a linha onde o gradiente está agora Está meio que do outro lado da página. Só vai dar errado, então vamos guardar isso Ótimo. E esses são apenas um pouco mais de brilho Legal. Então, terminamos de estilizar isso no momento Vamos continuar criando nossos componentes. Então, eu quero criar uma nova pasta aqui, e vou chamá-la de componentes. Como mencionei em minhas aulas anteriores, algo que gosto de fazer quando estou criando um projeto de reação é criar uma pasta de componentes para que eu possa categorizar e criar todos os meus componentes nas pastas existentes Acho que isso torna as coisas muito mais fáceis para mim. Depende apenas do aplicativo com o qual você está trabalhando e de como gostaria de estruturar seu projeto. Então, dentro da pasta do componente, vou criar um novo arquivo e vou chamar esse arquivo para fazer container porque esse será aquele grande contêiner branco que vimos no outro, no exemplo. Então, vou pressionar Enter e, em seguida, usar, acredito que sou eu, é um preenchimento automático, vou usar o R AFC e ele criará automaticamente um componente funcional Então, vamos lá, temos um componente funcional chamado to do container. O que vou fazer agora, voltando para a página principal, vou substituir nosso pequeno texto aqui que diz “Do” e substituí-lo pelo nosso componente de contêiner Do, que , como você vê, é importado automaticamente por causa de algumas das extensões que importado automaticamente por causa de instalamos E vou dizer que se você tiver mais dúvidas sobre extensões, deixe um comentário abaixo e eu posso recomendar várias se precisar de ajuda com coisas assim. Então, passando para, você verá aqui à direita que o contêiner to do agora está realmente presente no, no aplicativo Então, você sabe, estamos trabalhando muito bem. Então, a próxima coisa que queremos fazer é realmente estilizar, queremos que nosso contêiner de tarefas esteja no centro da página, certo? Queremos que esteja lá. Então, para fazer isso, acho que a maneira mais fácil de fazer isso seria definir nossa página uma caixa flexível, porque essa será a única coisa em nossa página Podemos meio que permitir que seja uma caixa flexível com o mínimo de preocupação de que isso afete qualquer outra coisa. Então, em nossa página, o que vou fazer aqui é configurar a tela, fazer flix e depois vou justificar o conteúdo para ser centralizado e salvá-lo Como você verá, o contêiner já saltou para o centro e, portanto, já está centralizado na página A próxima coisa que vou querer fazer agora é estilizar o próprio contêiner. E vou adicionar um pouco de estilo embutido a isso para chegar onde queremos que esteja . Usando algum estilo embutido. Ao mergulhar aqui, vou até o estilo e, em seguida, vou definir uma margem superior a , digamos, cinco M por enquanto, apenas para empurrá-la um pouco para fora do topo da página. Então, a próxima coisa que eu quero fazer agora é definir uma cor de fundo. Cor do plano de fundo. Vamos apenas configurá-lo para branco, que é FF e, salvo isso, ótimo. Então, temos nosso contêiner para fazer, mas, como você pode ver , está indo até o final da página. Não queremos necessariamente isso. Então, o que eu vou realmente fazer é definir uma altura máxima e, em seguida, mantê-la limpa e contida. Podemos tornar isso maior se quisermos. Podemos torná-lo mais responsivo ou podemos torná-lo rolável bom ter todo esse tipo de coisa , mas nos preocuparemos com isso à medida que avançarmos. No momento, queremos apenas obter esse tipo de MVP, o produto mínimo viável com o qual estamos trabalhando aqui Tudo bem, mais algumas coisas que estou vendo aqui é que não queremos que fiquemos realmente esmagados até a borda do contêiner Então, provavelmente queremos adicionar um pouco de preenchimento. Então eu vou aqui e adiciono um pouco de preenchimento. Vamos adicionar duas barras de preenchimento em toda a volta. Ótimo. Parece muito bom. Então, por fim, vamos adicionar um raio de borda para apenas curvar esses cantos Então você vai digitar o raio da borda e, em seguida, eu vou configurá-lo e salvá-lo. Ótimo. Estou muito feliz com a aparência agora. Acho que podemos fazer um pouco mais quando começarmos a adicionar os componentes internos aqui como cabeçalho. E também vamos adicionar a entrada, o botão e o real a fazer. Então, vamos começar e fazer isso. Voltando ou realmente dizendo em nosso contêiner Do, vamos adicionar o cabeçalho Então, vamos criar um H. E, na verdade, porque estamos usando o material I, que é uma biblioteca específica de estilos e componentes que está disponível para nós Como estamos usando o react, podemos realmente usar alguns de seus componentes integrados que nos permitem estilizar as coisas um pouco mais rápido Isso nos permitirá começar a usar nosso Apple um pouco mais rápido. E também nos ensine uma nova biblioteca e nos dê uma nova ferramenta com a qual nos familiarizarmos. Então, vou usar um componente que eles chamaram de tipografia e importação Agora, por experiência anterior, sei que o componente de topografia tem um elemento ou uma propriedade chamada variante Então, vou usar a propriedade de variante e vou querer acessar a variante de H um, porque esse será nosso título em nossa página. E então, dentro desses dois colchetes, vou digitar todos Esse será o nosso título por enquanto. E aí está, nós o temos lá. É um pouco diferente do que tínhamos antes. Talvez eu queira seguir em frente e estilizá-lo de forma um pouco diferente apenas para o propósito deste tutorial. Mas se você quiser usar materialmente y para estilizar um projeto maior, você pode realmente entrar na pasta de estilos que vem com o próximo JS e depois modificar o tema e trabalhar um pouco mais detalhadamente com a tipografia e qual é o tamanho de H, um, qual é a espessura, o peso da fonte e coisas Você pode realmente começar a estilizar os componentes, mesmo que seja uma biblioteca de componentes. Mas, por enquanto, vou acessar os estilos reais do próprio elemento para modificá-lo da maneira que eu quero. Então, no que diz respeito ao material I, cada componente do material Y tem uma propriedade especial chamada X. E X é basicamente o mesmo estilo, como o estilo embutido, mas é específico do material Y. Então, vamos usar o SX Prop e vou definir o tamanho da fonte como, é específico do material Y. Então, vamos usar o SX Prop e vou definir o tamanho da fonte como, digamos, três Ram, talvez quatro Em seguida, definiremos o peso da fonte. Acho que cerca de 500. Tudo bem, legal. Parece muito bom para mim. Vamos seguir em frente. Então, a próxima coisa que queremos fazer agora, certo, analisando nosso aplicativo de tarefas, queremos considerar essa entrada, o botão Enviar e o que fazer por si só. Então, vou começar criando o Todos e depois voltando, voltando ao nosso aplicativo e, na verdade, configurando isso para três Rams para que corresponda um pouco mais ao design do exemplo Vamos criar outro componente, chamada para fazer o item. Vamos usar a mesma coisa, R AFC, e ele vai exportar nosso componente para lá E então, em vez de apenas importá-los imediatamente, vou realmente criar alguns dados simulados Então, vou fazer uma simulação constante e, em seguida, vou criar uma matriz de strings, que será nossa Para fazer isso, faça um, faça dois e faça três. E vamos salvar isso. E o que vou fazer abaixo da tipografia, agora vou simular dados e importar nosso Então, usando esses colchetes perolados, vou pegar nossa simulação e mapeá-los Então, se você se lembra corretamente, esse mapa é uma função que podemos usar em matrizes para nos permitir iterar sobre os objetos ou itens em uma matriz e, em seguida, distribuí-los e realizar uma espécie de ação repetível em Então, vamos mapear cada um dos itens e o que queremos fazer, porque os mapas precisam ter um retorno, vamos voltar para fazer item, vamos dizer isso. Agora está me dando um ar aqui. Diz que estou perdendo a chave Prop porque, com mapas, você precisa ter uma chave para que cada item seja identificável de forma independente Então, o que vamos fazer é definir a chave para ser a tarefa, porque sabemos que nossas tarefas são únicas. Isso vai funcionar. Mas você gostaria de defini-lo como um ID exclusivo, o que faremos no futuro. A próxima coisa que vamos querer fazer aqui é que, como você vê aqui à direita, os itens a fazer foram preenchidos várias vezes Portanto, o Mac to Dos está presente. Portanto, há três para fazer. Há três ou dois itens. No entanto, eles não foram realmente preenchidos com os dados E isso porque não conseguimos passar os dados para o componente real do to Do it. Então, vamos seguir em frente e fazer isso. Voltando ao item do, o que vamos fazer aqui é onde o Javascript e os scripts de tipos começam a diferir um pouco. Se você estiver familiarizado com o Javascript reativo, saberá que pode simplesmente criar um suporte para fazer e depois passá-lo para o seu componente real Mas o que você não veria no script de trabalho é esse erro que estou recebendo. Portanto, diz que o elemento de vinculação a ser feito implicitamente tem qualquer tipo. E isso porque não especificamos o tipo de fazer isso. Assim como no Javascript, tudo tem um tipo, certo? Tudo no script de tipo tem um tipo. Mas no script de tipo, eles querem que você defina ou declare explicitamente esse tipo para que não haja confusão sobre o que está sendo passado, onde está sendo passado, etc Então, uma maneira de fazer isso no script de tipo é criar algo chamado interface de interface. E você pode chamá-lo do que quiser, mas vamos chamá-lo de adereços E dentro dessa interface, agora vamos definir nossos tipos. No momento, só temos um, mas podemos adicionar mais conforme necessário. Então, vamos criar, vamos definir fazer para ser uma string. Nós vamos dizer isso. E então, fora desse colchete encaracolado aqui, vamos colocar dois pontos E vamos digitar a palavra adereços para indicar que esses adereços devem ser aplicados a esses parâmetros A fazer é digitar string. Se adicionarmos mais alguma coisa aqui, não precisaremos adicionar mais e mais adereços na linha sete Poderíamos simplesmente adicioná-los nas linhas 56.7, etc. Então, voltando ao item do, agora queremos passar o real para fazer. Certo? Porque você sabe que agora está esperando isso. Basicamente, ele sabe que fazer um item exige uma tarefa. Portanto, é necessário que realmente usemos essa propriedade específica, que é uma das melhores vantagens do texto datilografado Você não vai cometer esse tipo de erro. se fosse Javascript e nunca passássemos para do, talvez estivéssemos nos perguntando por que nossa tarefa nunca é preenchida, mas como é um script de tipo , ela nos dará esse erro enquanto escrevemos nosso código Portanto, não teremos erros silenciosos falhando enquanto nosso aplicativo estiver em execução Então, tudo o que precisamos fazer aqui é escrever a propriedade a ser feita e, em seguida, passar a tarefa a fazer e salvá-la. E aí está. Temos que fazer um, fazer dois e fazer três, e assim como escrevemos isso em nossa simulação, sabemos que estamos passando os dados corretos Incrível. A próxima coisa que vamos querer fazer é começar a estilizar isso, certo? Porque temos algumas coisas que queremos fazer aqui. Queremos ter uma pequena caixa de seleção, queremos ter um pequeno botão de exclusão Queremos ter esse fundo cinza. Você sabe, algumas coisas que queremos realizar. Então, se formos fazer o item, podemos começar a analisar isso. Então, dentro disso, a primeira coisa que quero fazer acho que a primeira coisa que quero fazer é definir esse plano de fundo. Então, deixe-me pegar uma cor aqui. Então, vamos fazer um RG, uma cor, vamos até a imagem colorida aqui e vamos escolher uma espécie de cinza claro para nosso plano de fundo Vou fazer isso e depois vamos defini-lo como plano de fundo do nosso mergulho usando a cor de fundo desse estilo. Vamos configurá-lo para isso. guardar essa ajuda aqui. Ótimo, temos nossa cor de fundo. A próxima coisa que vamos querer fazer é provavelmente adicionar algum espaçamento abaixo deles e, em seguida, adicionar o raio da borda Então, vou adicionar isso fazendo uma margem inferior de, digamos, uma RAM. Dessa forma, cada coisa nova para fazer isso for adicionada, teremos esse espaçamento. E então também vamos adicionar, hum, o raio da borda de, vamos fazer 0,25 E digamos que a última coisa que vamos querer fazer aqui agora é adicionar um pouco mais de preenchimento para que haja um pouco mais de espaço ao nosso redor para fazer Então, adicione o preenchimento e talvez também façamos uma RAM, apenas por toda Tudo bem, legal. Então, isso parece bastante decente por enquanto. A próxima coisa que acho que vamos querer abordar são os elementos reais internos, certo? Queremos ter essa caixa de seleção e aquela lata de lixo Acho que a maneira mais fácil de pegar a caixa de seleção provavelmente usar a caixa de seleção de material. Sim, nós só queremos algo realmente básico como isso. Queremos que ele seja desmarcado primeiro e depois marcado à medida que o usamos Na verdade, podemos simplesmente copiar essa linha de texto aqui e incluí-la. Antes de podermos pré-dobrá-la, retiraremos esta peça que está etiquetada aqui da forma como eles querem etiquetá-la. Se quisermos incluir uma etiqueta com a caixa de seleção, podemos, mas vamos estilizá-la separadamente. Em seguida, adicionaremos essa importação de maturely by Então, se estiver aqui, temos que fazer coisas incríveis. Outra coisa que podemos fazer é embrulhar arte para fazer em um elemento tipográfico, pois é uma tipografia de elementos E guarde isso, legal. Em seguida, queremos adicionar uma lata de lixo. Não tenho certeza se eles têm um ícone de lata de lixo, mas se tiverem, seria ótimo. Vamos experimentar o lixo Incrível, eles têm um ícone de exclusão, podemos realmente acessá-lo. Nós podemos copiar isso. Use isso em nossos componentes, eu me pergunto se. Sim, e podemos mudar a cor, o que é ótimo. Vamos continuar e vamos deixar isso aqui, desculpe. Vamos colocar o ícone em nosso projeto aqui. E então vamos chamar o ícone de exclusão aqui. Isso é ótimo, temos nosso ícone de exclusão aqui. E então devemos ser capazes de definir a cor nela. Então, se digitarmos em cores e colocarmos, acho que provavelmente haverá perigo ou erro. Provavelmente, o erro deve ser a cor vermelha. Se guardarmos isso, ótimo. Temos uma lata de lixo vermelha. Incrível. Você notará , porém, que tudo isso está descendo diretamente em linha reta, o que não é o ideal. O que queremos fazer para corrigir isso é na verdade, basicamente configurá-lo para estar em uma caixa flexível outro lado e depois separá-los de lá Então, vamos criar um mergulho que contorna a caixa de seleção na topografia Porque, se você se lembra do nosso exemplo, queremos que eles permaneçam no lado esquerdo e que o delete fique no lado direito. Em seguida, vamos tornar essa tela maior do tipo flex box Configure para flexionar isso. A mesma coisa aqui, vamos adicionar esse adereço, digamos que também estamos alinhando itens no centro porque eles estão um pouco instáveis. E faremos a mesma coisa aqui Legal, tudo parece muito bom. A última coisa que vamos querer fazer é definir esse mergulho superior para o conteúdo a ser espaçado entre Queremos que basicamente esse div e esse ícone de exclusão estejam o mais distantes possível E uma coisa que vai nos ajudar nisso é definir um mínimo com esse contêiner externo, porque no momento não há muito espaço entre eles. Certo? Então, para fazer isso, vamos ao nosso contêiner de tarefas e vamos definir uma largura mínima, digamos 40 de largura de visualização, uma, se for isso, isso é muito bom. Então, temos nossas tarefas, nós os temos preenchendo linha por linha Temos nosso cabeçalho, ao qual, na verdade, vou adicionar uma margem na parte inferior de apenas uma RAM. E temos o que fazer, e nossa caixa de seleção está marcando e desmarcando, mas agora nenhum dos nossos botões ou ícones está fazendo Então, vamos fazer com que eles façam coisas. Então, o que também precisaremos fazer aqui para permitir essa funcionalidade é envolver nosso ícone de exclusão em um botão. Então, acabei de importar o botão do material. Eu, eu não tenho. Agora eu importei o botão do Material UI, e agora ele é na verdade um botão. Então, quando você passa o mouse sobre ele, vê que ele realmente se transforma em um botão. Há um pequeno estado de foco, então temos certeza de que é essencialmente um botão Tudo bem, então a outra coisa precisaremos fazer agora, certo, em vez de usar esses dados simulados, vamos realmente querer usar dados reais em algum momento Então, para realmente inserir os dados reais, precisaremos de uma entrada, certo? Então, vamos continuar e criar nossa opinião. Vamos criá-lo aqui mesmo neste novo contêiner. Eu crio, acredito em material. Tem uma entrada de texto. Opção de entrada de texto. Campo de texto de maio. Sim, é um campo de texto e acho que queremos exatamente como o campo de texto delineado realmente básico Então, novamente, vou copiar a primeira linha das opções aqui, a documentação, e colá-la em nosso projeto. E vou fazer uma solução rápida para poder importar o campo de texto. E se voltarmos, tripulação, tudo bem, está lá. Mas também precisamos de um botão. Então, vamos criar um botão separado usando apenas o mesmo componente de botão, que será um botão Enviar. Ótimo. Então, temos o botão e o botão Enviar próximos um do outro. Na verdade, vou embrulhá-los em um mergulho para que fiquem contidos, assim como todo o resto. E então eu posso adicionar estilo a eles para fazer com que as coisas pareçam do jeito que queríamos com o div Eu vou fazer a mesma coisa. configurar e fazer dela uma caixa flexível Então, vamos fazer o Display Flex. E você acha que está fazendo o mesmo tipo de padrão repetidamente? Uma coisa que você pode fazer é criar algo como um componente de estilo que é apenas um contêiner que cria automaticamente uma caixa flexível toda vez E então use isso em vez de usar divs básicos. Isso é algo que você pode querer fazer se estiver criando um projeto maior ou apenas pensando em otimizações Display Flex, vamos adicionar uma margem inferior de um M. Sim , está muito bom Eu quero fazer com isso. Bem, vamos também, desculpe, vamos adicionar alguma margem ao lado da nossa entrada. Margem, certo? Vamos fazer um M novamente. E eu quero fazer algo com esse botão aqui para que ele fique um pouco mais firme. Então, se eu for até o botão LI de contido, temos delineado, temos texto Acho que o que queremos fazer é ter um botão contido. Então, na verdade, vou adicionar essa parte aqui que diz que variante é igual a contida em nosso botão Vamos guardar isso. E agora você vê que temos um pouco mais de um botão contido. Mas você também notará que é muito, muito alto. Não sei se queremos que seja tão alto. Acho que pode ser por causa da nossa caixa flexível. Então, acho que o que posso fazer aqui é, na verdade, apenas alinhar os itens no centro, o que deve fixar a altura extra do nosso botão Vamos tentar isso. Diga isso e ótimo. Sim, está de volta ao tamanho normal. Mas sim, eu gosto do botão, mas acho que quero manter um tema semelhante de estilo semelhante em toda a coisa. Então, o que vou fazer com o botão aqui é, na verdade, alterar o plano de fundo para corresponder à nossa nota linear no hot back ao nosso arquivo TSX de índice Eu literalmente vou pegar essa cor de fundo aqui, copiá-la e voltar para o nosso elemento de botão. E dentro do adereço X que vou adicionar aqui, vou simplesmente colocá-lo e salvá-lo. Lá vamos nós. Nosso botão funciona automaticamente, então vamos comentar isso por um segundo para que possamos realmente dar uma olhada nisso. Era branco e azul. E então, quando, deixe-me adicioná-lo novamente. Ainda é branco, mas agora tem esse gradiente linear funcionando muito bem A próxima coisa que queremos abordar é a entrada real. No momento, o rótulo diz descrito. Vamos mudar isso. Portanto, é um pouco mais rápido. Digamos, talvez, adicione um novo ponto e salve-o. 10. Adicionando um estado global: A próxima coisa que vamos querer fazer aqui é basicamente garantir que nossas tarefas estejam em alguma ferramenta de gerenciamento estadual. Vamos querer considerar algo como Redox ou Z. Stand, pessoalmente, acho que o Redux pode ter um pouco de clichê demais para este projeto neste para Porque na verdade é um aplicativo muito simples de fazer. Não temos muitas ações complexas de interface do usuário. Acho que o simples uso de um em vez disso pode ser o caminho a percorrer. Se consultarmos a documentação do stand, podemos descobrir como instalá-lo e fazê-lo funcionar. Na verdade, é como um sistema de gerenciamento de estado mais simples. Então, vamos instalar o stand em nosso projeto. Agora que ele está instalado, vamos continuar e eu vou criar uma nova pasta aqui e vou chamá-la de store. Então, se você nunca trabalhou com a loja antes, basicamente é apenas um lugar onde você, seu estado, vive essencialmente nela. Simplificando, essa loja que vou criar se chama index e é aqui que fica nossa loja. Esse será o arquivo da nossa loja. Veja a documentação deles aqui. Basicamente, use isso para realmente criar nosso componente. Então, vou colocar isso lá e então podemos modificá-lo para se adequar ao que estamos fazendo. Então, o que isso faz aqui é importar essa função criada de um suporte. E criamos uma variável aqui chamada store, que chama create. E então, basicamente, esta é nossa loja aqui. Isso cria nossa loja. Nesse caso, os ursos na verdade, se transformarão em todos. Para começar, será uma matriz vazia. Quando vamos acessar nossos afazeres, é aqui que eles vão morar. Vamos simplesmente adicionar isso à nossa configuração de espaço de trabalho. Então vá pegar isso. São. Tudo bem. Então, em vez de aumentar a população, vamos realmente querer criar algo chamado adicionar. Isso vai ser o que acontece quando clicamos em Enviar e isso adiciona nossas tarefas à lista de coisas. Vamos definir o estado em vez de ursos para qualquer que seja o estado atual de fazer, em vez de mais um que vamos fazer, talvez tenhamos que colocar agrupá-lo em uma matriz, desculpe. Vamos fazer qualquer que seja o estado de qualquer matriz anterior e, em seguida, adicionar o novo para fazer isso em vez de state mais o novo. Ah, desculpe, esse foi o lugar errado que vamos realmente passar para fazer e mais o novo para fazer. Vou dizer que estou recebendo alguns erros aqui porque, novamente, precisamos colocar os tipos corretos neste projeto para que ele funcione corretamente. Então, na verdade, vou criar mais um tipo e vou criar mais uma pasta para o tipo. Então, vou criar uma pasta chamada types. Vou criar um novo arquivo, índice S, e será aí que todos os nossos tipos serão criados. Dessa forma, se eu criar um tipo, por exemplo, não preciso recriá-lo em cada arquivo, criar uma interface em cada arquivo Posso simplesmente exportá-lo e acessá-lo em todos os arquivos para que possamos manter nosso código seco. Então, essa é outra maneira de criar um tipo. Vou criar o tipo para fazer. E, assim como a interface, ela nos permitirá digitar com o que estivermos trabalhando. Então, vamos realmente pensar sobre isso por um segundo aqui, porque isso vai ser algo que podemos modificar algumas vezes ou podemos criar uma vez e depois construir o código. Então, quando analisamos nosso aplicativo de exemplo de tarefas, certo, queremos poder adicionar o Tarefas, certo? Portanto, tem que ter algum tipo de descrição ou o que quer que signifique. O que fazer é, como você mencionou antes, queremos ter um ID exclusivo Então, essa também é outra propriedade que nossas tarefas deveriam ter. Então, queremos uma descrição e um ID. Provavelmente queremos rastrear se está marcado ou não Porque se quisermos que ela persista quando a página for recarregada. Não podemos simplesmente colocá-lo ao vivo no lado do cliente, certo? Ele precisa morar em algum lugar da loja. Isso não vai mudar de recarga para recarga. E, finalmente, queremos poder excluí-los. Então, novamente, exclua tipos de vidas com essa capacidade de identificação. Para excluir uma tarefa específica, é bom que ela tenha um ID. Então, acho que estabelecemos três coisas para fazer. Deve ter ou três propriedades. Vamos dar a ele uma propriedade de ID, que provavelmente será uma string. Provavelmente vamos fazer disso, desculpe, provavelmente vamos fazer disso um Provavelmente vamos dar uma descrição. Também será uma corda. Finalmente, vamos dar a ele uma propriedade verificada. Então, se está verificado ou não, isso vai ser uma bolha Então, verdadeiro ou falso. Deixe-me exportar esse tipo para que possamos acessá-lo em outros lugares. E então eu vou importá-lo aqui. Vamos ver. Acho que podemos, na verdade, oh, você sabe o que é. Preciso criar outra, preciso criar mais uma interface, mas isso é só para a loja, então preciso criar um tipo de loja para fazer. Basicamente, isso nos dará todas essas opções. E vamos mudar isso, mas removendo para Do, basicamente precisamos definir quais tipos são esses. Vai ser uma matriz para fazer. O Array importará os tipos de tarefas a fazer. Uma matriz de Todd to do será uma função que inclui do, que é do tipo string Na verdade, você sabe o que, isso não é , provavelmente será uma descrição. Então, vamos mudar isso. Vamos mudar isso aqui. E vamos mudar isso aí. Guardaremos isso, depois retornaremos e, em seguida, o último aqui. Ou talvez tenhamos mais dois. Então, vamos remover para fazer isso, essa será nossa exclusão. Vamos pegar um ID do tipo string e tentar funcionar. E então, sim, então vamos mudar isso para remover. Para fazer isso, sabemos que é isso que deve ser acomodado por enquanto Tudo bem, então estamos recebendo um erro aqui. Ah, porque não aplicamos nossa loja para agir como nosso estado em nossa loja com script de tipo. Depende meio que para onde as coisas estão indo. Mas geralmente você pode colocá-lo ou menos na função aqui. exemplo, quando você está criando um efeito de uso, você o coloca logo após as palavras efeito de uso, mas logo antes do colchete aberto Então, acho que posso colocá-lo aqui mesmo depois de criar. Então eu vou, porque é basicamente um gancho. Então, vou escrever na loja Do, vou fechar o suporte e salvá-lo e pronto. Tudo bem, os Is mudaram. Diz que estou perdendo as seguintes propriedades. Adicione para fazer. Oh, você sabe o que? Isso é só porque eu digitei de forma diferente. Deixe-me fazer com que tudo seja minúsculo. Eu só estava dizendo que não fui removido para fazer isso. Vamos criar isso. Então, vamos pegar uma identidade e ela não retornará nada por enquanto. Oh, não, não gosta disso. Não. Na verdade, deixe-me resolver, ok, deixe-me resolver dois problemas. Vou consertar esse anúncio para fazer. O que vamos fazer aqui é acreditar, oh, você sabe o que, bem, são algumas coisas diferentes. Alguns erros diferentes que estamos recebendo aqui. Portanto, o operador de propagação realmente precisa acontecer no estado para fazer isso, talvez não o coloquemos de volta em uma matriz. Isso vai resolver isso? Agora, indique. Vamos terminar de criar nossa tarefa removida e, em seguida, podemos resolver essa outra questão, vou apenas copiar e colar. A maneira como vamos descobrir o que fazer, estamos removendo para basicamente acessar todas as nossas tarefas e queremos filtrá-las para as tarefas que não estamos mais usando. Tudo bem. Fazer o que não queremos mais fazer será, em vez disso, o que devemos fazer. Um estado a ser filtrado por qualquer filtro a ser feito pelo estado de ID Filtro Dom Dodd. Ford é o principal Estou faltando outro suporte aqui indicado no filtro Queremos, vamos pesquisar o filtro. OK. Vamos usar um filtro correto que não seja igual ao DID. Isso deve funcionar. Vamos descobrir por que esses erros estão ocorrendo agora. Tudo bem, então, olhando para isso, o que foi removido está faltando no tipo de tarefa a fazer. Nunca adicione o que fazer, mas é obrigatório no tipo para fazer o que é armazenado. Oh, esse é o único erro ao chegar aqui? Claro. Todas as minhas vírgulas estão no lugar certo Limpe, removido para fazer, de ambos. Vamos dar uma olhada apenas no anúncio para fazer erros. Vamos ver o que está acontecendo aqui. Está muito claro, mas nunca definido. Então, um pequeno erro aqui é que na verdade, provavelmente só precisamos remover esses colchetes. E então, em vez de apenas passar a descrição, o que realmente queremos fazer é criar algo novo para fazer, certo? Então, na verdade, queremos criar um ID, ID exclusivo, que será uma string. E então vamos criar a descrição, que será apenas a descrição. E então também vamos adicionar um estado de verificação. Então, será verificado e começará como falso. Então, o estado de verificação, agora não podemos simplesmente passar uma string vazia para cada ID. Na verdade, vamos querer um identificador exclusivo. E para isso, provavelmente usaremos uma biblioteca UUID, qual o NPM tem pelo menos uma Vamos usar esse único UID e ele basicamente nos permitirá criar IDs exclusivos para nosso projeto Então, vou instalá-lo aqui. E então eu vou importá-lo em nossa tempestade e salvá-lo. Ah, e você sabe o que, eu acho que preciso instalar e salvar a Deb. Acho que às vezes recebo esse erro. Ok, legal. E então, se tudo mais falhar, basta fechá-lo e abri-lo novamente. E às vezes isso apenas limpa o ar. Oh, vamos me dar uma sugestão aqui, deixe-me tentar isso. Desista, volte em mais tempo. Tudo bem. O erro perfeito foi corrigido. Tudo bem, então nós queremos, isso deve funcionar. E então, em vez de passar uma string vazia, acredito que o que eles sugerem aqui é que, sim, chamamos o UID sempre que precisarmos Então, antes e depois, vamos chamá-lo e isso deve criar um ID exclusivo para nosso novo fazer. Incrível. Então, acho que estamos praticamente configurados na área de identificação. Acho que não podemos instalar mais pacotes. Trabalhamos com o suporte Z agora para realmente acessar o nosso e adicioná-lo à nossa lista e usá-lo para fazer em vez de também. Acho que podemos comentar o que fazer agora. Acho que resolvemos o erro que estávamos cometendo, que é, na verdade, com base no nível superior em que estamos indo Tudo bem, muito legal. Ambos devem estar funcionando agora. Opte por voltar para fazer o item. Vamos meio que nos conectar a tudo agora e fazer com que tudo funcione da maneira que queríamos. Então, acho que precisamos estar no contêiner, então queremos fazer. Então, vamos começar com isso. Então, vamos pegar o que fazer. Portanto, fazer constantemente é igual a este livro guardado aqui em um estande E então queremos conquistar o estado. E no estado as coisas para fazer isso estão presentes nesse estado, certo? Então, essa pequena matriz que criamos no início, é o que queremos pegar para fazer aqui, D não é uma tigela, é isso que está nos dando esse erro, na verdade, oito corretamente. Tudo bem. É apenas um erro de tipo que estamos recebendo porque o estado tem qualquer tipo. Acredito que existam alguns tipos de guias de script que podemos seguir aqui acessando nossa loja. O que eu não exportei para a loja? Exporte a loja. Sim, eu tenho que exportar a loja. Caso contrário, não podemos usá-lo. Esse era o problema. Eu estava tipo, por que isso não está funcionando? Tudo bem, vamos fechar isso mais um pouco. Abra-o novamente. Oh, ainda estamos recebendo o erro. Isso é muito interessante. O que dizia? Digite, mas está importando a loja errada. A loja. Na verdade, renomeie isso de forma um pouco menos confusa. Então, vamos chamar isso de To Do Store. E eu vou ligar para a Store Store. Eu importei a loja errada, então preciso importar a loja da loja. Então eu posso fazer o que eu estava tentando fazer. Eu queria saber por que não estava funcionando. Tudo bem, então o Estado será o Estado a ser feito. E você vê como um script de tipo que um pronto cria, como esse tipo de documentação embutida. É muito bom, nesse sentido, que você possa simplesmente descobrir o que está perdendo, essencialmente. Tudo bem, então isso será nosso dever. Portanto, devemos ter uma lista do que devemos fazer. Ainda não temos nada para fazer, mas será aqui que moraremos. Se eu continuar e mudar para dois para fazer, não devemos ter dados porque ainda não precisamos fazer isso. Então, isso está realmente funcionando. Então, sabemos que quebramos completamente nosso aplicativo ou, você sabe, o alteramos corretamente. Então, vou encerrar isso. Estou recebendo um pequeno erro aqui dizendo que o tipo de tarefa não pode ser atribuída a fazer E isso está correto porque, na verdade, To Do, originalmente o definimos como uma string. Então, o que realmente precisamos passar é fazer uma descrição. A mesma coisa com a chave aqui. Precisamos, em vez de passar o objeto de fazer, precisamos passar para o Dod e salvar isso, ter esses erros A próxima coisa que vamos querer fazer agora é conectar nosso anúncio para que possamos realmente adicionar a mensagem de que vamos voltar a publicar Estaremos em nosso contêiner de tarefas e, em seguida, pegaremos nossa função , que é ad to do. Então, vamos fazer a mesma coisa. Você armazena, armazena, agrupa, declara. E então vamos pegar um anúncio estadual para fazer. Nós vamos salvar isso. E então o que vamos fazer é chamar isso quando o botão Enviar for clicado, certo? Então, poderíamos fazer isso, poderíamos realmente fazer isso no Submit. Podemos criar, podemos transformar isso em um componente de formulário e podemos realmente criar uma função manipuladora para isso Vamos criar um manipulador chamado Hand Submit. Queremos fazer duas coisas. Queremos passar um evento porque, basicamente, o que vamos acabar tendo que fazer é direcionar essa entrada e curtir o valor dessa entrada, então queremos passar no caso do clique, qualquer tipo por enquanto, o que não é a melhor prática, mas isso só vai eliminar o erro que estamos prestes a encontrar. Então, chame o evento, evite que a página seja recarregada toda vez que a adicionarmos para fazer O que vamos fazer agora é chamar nosso anúncio para fazer. Então, vamos adicionar To Do. E a tarefa que estamos adicionando será nesse evento, então será o final do evento. Teremos que atacá-lo, certo? Portanto, esse manipulador será chamado no envio. Em nosso formulário, temos uma propriedade especial chamada envio que, basicamente, quando você envia o formulário, ela realmente chama qualquer função que você deseja chamar. Portanto, nosso onsubmit será esse identificador a ser feito. Então, como resultado disso, um evento será passado para esse identificador para fazer. Por isso, queremos adicionar nossa meta de tarefas. Esse evento será o alvo do evento porque o formulário envolve vários elementos Será o primeiro elemento que estamos almejando. E então será o valor disso. O valor do elemento será o que passaremos para nosso anúncio fazer, que é a descrição. Eu sei que provavelmente foi muita coisa para absorver. Vamos voltar mais uma vez. Criamos um componente de formulário, usamos o elemento de formulário. O elemento do formulário tem uma propriedade incorporada chamada de envio sempre que seu formulário é enviado, e é isso que acontece. Criamos essa função chamada handled to do, que evita que o padrão impeça o recarregamento da página quando clicamos no botão Enviar ou enviamos o formulário E então também acrescenta coisas para fazer. O anúncio a ser feito pegará essa descrição, esse valor da entrada, e então o enviará para nossa loja e nos dará o que fazer. Isso criará uma relação com uma nova ID e o estado de verificação das falhas, que deve funcionar muito bem A última coisa que vamos querer fazer antes de prosseguirmos e adicionarmos a necessidade de fazer é adicionar o tipo ao nosso botão. Então, você quer que o botão seja do tipo enviar. Há duas maneiras de enviar isso agora. Você pode pressionar Enter ao adicionar seu valor ou clicar em Enviar. Queremos ter certeza de que ambos estão funcionando corretamente. Agora, o botão é digitar Enviar. O formulário sabe que, quando pressionam esse botão, pretendem enviar e deve funcionar adequadamente. O que vamos fazer é testá-lo. Então, vamos adicionar o que fazer e ver se aparece. Apareceu. Temos a primeira coisa a fazer e nosso anúncio está funcionando corretamente. O que vamos querer fazer agora é que nossa remoção funcione corretamente. Então, isso é muito parecido. Só teremos que fazer isso em nosso componente de item a fazer. Então, passar para fazer o item realmente prosseguirá e nós o adicionaremos ao nosso botão aqui Vamos adicioná-lo ao botão de exclusão que criamos. Então, as primeiras coisas que precisamos fazer. Então, isso vai ser removido para fazer. Removido para armazenar nossa loja. Vamos pegar o Estado e depois vamos conquistar o Estado. Remova para fazer. Incrível. Removido corretamente, é necessário um ID, então vamos querer pegar qualquer que seja o ID do Dos para que possamos excluir o que fazer correto com o botão. Agora vamos dizer “ clique para remover”. Queremos chamar remove para Do. Então, queremos passá-lo para Do e salvá-lo. Na verdade, isso vai me dar um pequeno erro porque cometi um pequeno erro no contêiner de tarefas. Na verdade, cometi o erro de passar para fazer a descrição. Nós não queremos fazer isso. Queremos passar pelo buraco para fazer. Vou dar isso para fazer o tipo de tarefa da nossa pasta de tipos. Essa foi outra boa razão pela qual deveríamos ter repassado nossas dívidas. Então, você receberá outro erro aqui porque é como se todas essas coisas estivessem quebrando agora. Vamos apenas acessar a descrição e todos os nossos erros devem ser cometidos. Agora, novamente, esse é outro bom motivo pelo qual o script de tipo existe. exemplo, embora possa parecer um pouco chato ter que resolver esses erros o tempo todo, se não resolvêssemos o erro, agora passaríamos alguns minutos tentando depurar por que o erro está ocorrendo com o script Java Porque não há como saber se nosso projeto está falhando silenciosamente Se fizemos tudo corretamente, combinamos nossa mudança para fazer, passamos a fazer para o ID Vamos adicionar um segundo para fazer isso, só para ter certeza de que, se a excluirmos, é a correta que estamos excluindo E vamos tentar excluir para fazer. Ninguém funcionou perfeitamente. Então, agora podemos adicionar coisas a fazer, podemos remover as. A última coisa que queremos fazer é provavelmente, eu acho, desculpar. As duas últimas coisas que queremos fazer são rastrear o estado da verificação. E então, se você perceber quando eu atualizo esta página, persista. Então, queremos ter certeza de que nosso T está persistindo, está usando Enfrente isso primeiro. Vamos abordar a persistência primeiro Para lidar com a persistência, usaremos o middleware incluído no suporte Z. Então, o que faremos aqui é importar, importar ferramentas de profundidade e importar persistência E, como você pode ver aqui, tudo o que eles fizeram foi, na verdade, incluir o aplicativo , incluir ferramentas detalhadas na loja e persistir E isso só permitirá persistir. Eu acredito que isso faz isso, salvando-o no armazenamento local. Ele será salvo no armazenamento local do seu navegador e, toda vez que você reativá-lo, poderá acessar os mesmos valores. Se você o configurasse no armazenamento da sessão , sempre que sua sessão expirasse, você poderá acessar esses valores novamente. Vá em frente e envolva nosso aplicativo nisso. Coloque aqui, Opa, pegue esses dois lá E então queremos chamar a função set power. Também estou cometendo um erro aqui. Preciso remover esse suporte aqui. E então tudo isso deve ser transferido para o salvamento que eu acho que tenho mais alguns. Alguns parênteses demais, alguns poucos colchetes, mais dois. Guarde isso. Ainda estamos recebendo um erro. Preciso passar pelas opções. Esse é o meu bastão. Como você pode ver aqui, mantenha o estado real com o qual você está trabalhando e, em seguida, ele cria algo para nomeá-lo Isso porque quando você olha em seu aplicativo, em suas ferramentas de, ao inspecionar, você realmente verá um nome presente para sua loja Então, vamos seguir em frente e dar um nome a ele como o segundo argumento a ser feito. E guarde isso. Coloque-o dentro do suporte direito. Eu adicionei um? Não, não, não. Eu o coloquei entre colchetes errados É isso que está aqui. Persist não pode ser atribuído a um tipo de armazenamento. Por que isso é definido como um passe definido aqui? Esse é o problema. Então, eu só preciso tirar isso, aquilo e então isso realmente eliminará nosso problema extra de colchetes que estamos tendo Portanto, era apenas uma seta extra que não precisava estar presente em um parâmetro extra. Então, sim, agora configuramos o Persiste. Então, se tivermos feito isso corretamente, retornaremos ao nosso aplicativo. Refresque-o um pouco aqui. Adicionar para atualizar ração da página para corrigir essa hidratação O que essa hidratação está basicamente dizendo é que tudo o que ela cria não é necessariamente o que estamos obtendo e que estamos persistindo É diferente a cada vez. O que é justo o suficiente. Então, o que podemos fazer para corrigir essa hidratação é, na verdade, executar um efeito de uso simples para garantir que o que estamos vendo seja como uma página de carregamento, apenas para garantir que a coisa correta seja carregada. Então, o que vamos fazer, vamos executar aqui em nossa página de índice e vamos apenas criar carregado. O conjunto está carregado. Uma forma muito simples de reação. E vamos chamar apenas de efeito de uso aqui. Mas execute uma vez e, uma vez executado, vamos definir se é carregado como verdadeiro. Então, basicamente, verá que, você sabe, a página está carregada. Vai ver com quais dados estamos trabalhando e depois se tornará verdade. O que queremos fazer agora é mostrar isso para fazer o contêiner somente quando o contêiner está carregado corretamente. Não devemos cometer nenhum erro. Não, estamos dormindo nela. Por que isso foi feito antes? Essa é minha aposta. Acabei de dizer isso para a coisa errada por mais tempo. Sem erros de efeito de uso, sem erros de hidratação. Então, vamos para a próxima peça. Tudo bem, então a peça final que queremos fazer é lidar com nosso estado de verificação, certo? Queremos ter certeza de que, quando for verificado e atualizado, ele realmente permaneça verificado No momento, está sempre padronizando os padrões. Então, o que precisamos fazer para isso é definir o estado de verificação dentro do estado. Quando está marcado, ele o passa para o estado e isso persiste como parte do estado Então, o que vamos fazer agora é voltar ao índice. E vamos adicionar uma ação final aqui. Com a ação de alternar marcada, obtenha a ID de qualquer coisa com a qual estamos trabalhando E então ele seguirá a mesma estrutura em que se define, ele faz mais algumas coisas. Em seguida, vamos adicioná-lo aqui para que não verifiquemos a opção de erro, que é basicamente a mesma que No que diz respeito ao script de texto, string equals. Então, o que queremos fazer aqui agora, vamos ver. Queremos descobrir qual dos está marcado ou não Tudo bem, vamos, vamos seguir em frente e pegar nosso estado ponto a ponto para fazer sobre cada coisa a fazer. Tudo bem? E se isso bastasse, queríamos fazer uma das duas coisas. Se for igual à ID, quero retornar, quero retornar o que quer que seja. Então, queremos retornar o ID e a descrição. Mas queremos configurar o para fazer o que não deveria ser feito. Só precisa ser o oposto do que era. Então foi verificado, deve ser desmarcado. Se não foi verificado, deve ser verificado. Se não for esse o caso, só queremos voltar a fazer. Eu cometi um erro. Só queremos definir como verificado porque já sabemos que é necessário verificar dois argumentos. Temos um para colocar isso na área errada, provavelmente é por isso que estou recebendo um erro. Ah, não. Sim, e trabalhar se eu disser que sim, isso deve funcionar. Tudo bem, legal. Então, pegamos nosso, examinamos e mapeamos nosso Do para agarrar o indivíduo a fazer E estamos verificando cada uma delas para fazer, então queremos ver se a ID dessa tarefa deve ser feita. Propriedade ID ID do Tarefa. Corresponde ao ID que estamos passando. Quando verificamos isso, dobrando a verificação, se coincidir Então, sim, queremos passar o resto do parâmetro para fazer, mas, para o parâmetro check, queremos passar o oposto do que era. Então, seja qual for o parâmetro de verificação, queremos passar, você sabe, se fosse verdade queremos passar quedas, etc Se não corresponder a todos os outros dois Dos, só queremos devolver isso para fazer e seguir em frente. E então, dessa forma, vamos realmente seguir em frente e experimentar isso. Então, vou voltar para fazer o item e depois vou passar o Target, com o botão marcado Vou usar a loja mais uma vez. Marque a opção e salve isso na caixa de seleção. Ao clicar em Eu só quero passar na fila, vou alternar, marcar, marcar e, em seguida, vou passar o Todd e Isso deve funcionar. Então, se eu verificar esta página e atualizá-la, mais uma coisa eu tenho que fazer Na verdade, preciso acessar a propriedade marcada na caixa de seleção porque, no momento, a caixa de seleção não sabe se deve ou não estar Certo? Estamos meio que supondo que ele saberia. Não tem como saber. Então, o que vamos fazer aqui é acessar a propriedade verificada. A propriedade verificada na verdade será o que fazer, verificada é, então é se ela deve ou não ser verificada. Então, se eu atualizar, se eu verificar e depois atualizar, é o estado de verificação Incrível. Vou fazer mais um pequeno ajuste nos estilos agora que temos acesso a esse adereço na Se estiver marcado, quero fazer alguns estilos diferentes. Então, eu quero mudar a cor para ficar um pouco mais graduada. Então é como, oh, nós fizemos isso, é como se não precisasse mais ser tão proeminente. Então, eu quero mudar a cor do Tarefa. Se a opção estiver marcada, altere a cor. Talvez algo um pouco mais sombrio do que isso, talvez aquilo E então vamos aprovar isso. Queremos que a cor seja o que deveria ser, então vamos passar um automático. Sim, você quer dizer verificado não verificado? Legal. A próxima coisa que eu quero fazer é adicionar um ataque. Literalmente marcando nossa lista, pronta para isso está a linha de decoração de texto. Eu vou fazer a mesma verificação. Vou dizer que é a propriedade que estou almejando, se essa opção estiver marcada Desculpe, pergunta, eu quero escrever uma mensagem. Se eu simplesmente não quiser que a decoração do texto cheque, ela passa por uma linha. Incrível. Então, sim, praticamente temos todo o nosso aplicativo para fazer funcionando. Como mencionei antes, você pode realmente ver onde fica a loja para isso. Se você verificar se o aplicativo precisa de armazenamento local aqui, você pode ver que realmente temos ou devemos armazenar aqui. Então, temos nosso estado. Deixe-me falar um pouco sobre isso. Então, temos nosso estado que temos que fazer. Eles têm seus IDs exclusivos, bem, apenas os 12, mas ele tem um ID exclusivo. Ele tem a propriedade verificada de true e tem a descrição de a fazer. Se a desmarcarmos, você verá que ela muda e que o to do não tem mais essa propriedade verdadeira Agora tem uma propriedade falsa, tem a descrição a fazer e tem o mesmo ID. Então, sim, nosso aplicativo de tarefas está funcionando totalmente. A única coisa que resta a fazer é talvez hospedá-lo. Mas podemos abordar isso em uma lição diferente sobre como hospedá-lo usando o Verselle Na verdade, o Next S e o Verselle estão conectados. Acho que Versell criou o próximo S, então hospedou usando sell Mas abordaremos isso em uma lição diferente. Então, sim, espero que isso seja útil para você. Se você tiver alguma dúvida, deixe um comentário na seção de comentários abaixo. Se você gostou desta lição, deixe um comentário também. Isso realmente ajuda, meio mostrar isso para outras pessoas que desejam fazer o curso 11. Conclusão: Conclusão, falamos muito neste vídeo, desde as origens do react até a criação de seu próprio aplicativo para fazer totalmente funcional usando o próximo JS. No futuro, você deve ser capaz de enfrentar qualquer projeto de reação que surja em seu caminho. Até mesmo coisas com script de tipo para pesquisar algo quando você não tiver certeza e acessar o stack overflow Eu adoraria ver como você decidiu implementar seu aplicativo Do. Portanto, coloque 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. Adoro ver o que vocês têm a dizer. Consulte a página para obter mais informações sobre isso, Saiba mais sobre codificaçã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 meu canal e site do Youtube. Vou vinculá-los abaixo e no meu perfil se você também estiver interessado em aprendê-los, e vou ver no próximo.