[00:00] Para começarmos essa viagem de performance e conseguirmos entender bem a fundo como o React funciona, eu quero te chamar para fazer essa viagem junto, para conseguirmos fazer uma desestruturação, conseguirmos ver de forma reversa como o React funciona. Então, vamos lá.
[00:20] Primeiro, eu vou abrir o cardápio, que é uma das páginas que temos, então eu abri “SRC > pages > cardapio > index.tsx”. Até esse ponto já sabemos, porque fizemos isso juntos, esse componente, e ele tem 3 states que são compartilhados entre os filhos. Ele tem alguns imports, o export dele é uma função que chamamos de cardápio e o retorno dele é um elemento DOM, podemos chamar assim.
[00:51] Só que por trás do código não é bem assim. O retorno dele, para começarmos a explorar. O return dele não é um elemento DOM, nós chamamos ele de JSX. Você provavelmente já deve saber que é um JSX, só que muita gente não sabe o que é, para que ele funciona, por que tem esse nome.
[01:17] Então, vamos começar por aí, para começarmos a adentrar o React. Então, eu vou abrir o meu navegador. Antes de qualquer outra coisa, dentro desse curso, eu gostaria que você instalasse a extensão React Developer Tools, porque ele permite conseguirmos mostrar, porque ele brilha em verde, quando um componente renderiza e atualiza na tela.
[01:41] Então vamos precisar utilizá-lo no curso. Fica de conselho. Agora, eu já tenho a documentação do React aberta, dizendo o que é JSX.
[01:54] Ele está dizendo que é chamado JSX, que é uma extensão de sintaxe para JavaScript, e ele permite conseguirmos utilizar o JS, o JavaScript, junto com o X, que é de XML. Então, você não precisa adentrar em XML, mas basicamente é a forma como escrevemos elementos do HTML, que na verdade é um XHTML por debaixo dos panos. Enfim, não vou entrar em detalhes, mas ele é como escrevemos a tag HTML junto com JavaScript.
[02:28] Então, por isso, se voltarmos para o código, conseguimos escrever dessa forma, que o <h3>, que é um elemento HTML, tem um className, e o no meio do className colocamos um JavaScript. Isso é o JSX que permite.
[02:44] Só que essa é uma das formas de conseguirmos escrever os elementos React de forma mais bonita. Por debaixo dos panos, se descermos mais um pouco na documentação, o que ele diz?
[03:03] Ele está dizendo que o JSX representa objetos. Então, o Babel, que é um compilador de React, de qualquer coisa JavaScript para coisas que os navegadores entendem, ele compila esse JSX para uma coisa chamada React.createElement. Então esse elemento, que nada mais é do que um <h1> com uma classe chamada "greeting" na qual está escrito “Hello World”.
[03:36] E o que o Babel compila? Ele compila no React.createElement, ele coloca o <h1> como primeiro parâmetro. O segundo parâmetro é o className, que colocamos, que tem o nome de "greeting", e o terceiro é o children, que é o "Hello, world!". E no final das contas, esse React.createElement é esse objeto que diz que o type é h1, e que ele tem a prop className: "greeting", e a prop children:"Hello, world!".
[04:12] E ficamos nos perguntando que isso é uma coisa muito baixo nível, uma coisa que não vamos utilizar, uma coisa que não precisamos entender, e eu vou te mostrar que esse pensamento está errado. Eu vou entrar no VS Code, e vamos colocar no “routes.tsx”.
[04:35] Vamos tentar dar um console.log no cardápio, para ver se conseguimos ver alguma coisa. Então vou colocar console.log(Cardapio); e vamos ver. Dei um “Ctrl + S”, vou voltar para o navegador, vou voltar para o nosso Aluroni, inspecionar e vamos ver. Aparece que ele é uma função, isso já sabemos, que retorna alguma coisa.
[04:57] Então ainda não conseguimos ter nenhum retorno. Então, voltei para o VS Code, ao invés disso, eu vou executá-lo como se fosse o JSX, como se fosse uma tag. Vamos ver o que ele faz.
[05:11] Ele já me mostra que ele é um objeto, esse typeof você não precisa entender muito tempo, isso é uma coisa um pouco mais profunda do React. Ele tem um props, ele tem um key e um ref, que provavelmente você já deve ter visto em algum lugar, o key nós usamos bastante quando estamos trabalhando com listas. O ref eu não vou entrar muito em detalhes agora. E tem as props, que não conseguimos achar, que não conseguimos pegar.
[05:36] E ele tem mais algumas coisas, mas já conseguimos ver que a parte de dentro do JSX sempre retorna esse objeto do mesmo jeito que estava dizendo na documentação. Tem uma forma melhor ainda para conseguirmos ver essas coisas. Eu voltei para o VS Code, tirei o formato de tag, só deixei cardápio, e eu vou executá-lo como se fosse uma função.
[06:00] Então eu executei, vou voltar e, olha que legal, eu vou fechar o objeto que tinha antes, vou abrir o novo e agora ele mostra o prop correto.
[06:09] Então ele mostra que tem 4 children, então um children é o h3, que é o cardápio, o outro children é o buscador, o outro children é o filtro, a div com o filtro e o ordenar por, e o terceiro é os itens desse cardápio.
[06:29] Então, eu vou abrir o terceiro, vamos ver se conseguimos extrair alguma informação. Acho que não vamos conseguir extrair muito desse ponto. Só que o que isso mostra? Que tudo isso são objetos. Por debaixo dos panos o React sempre trata tudo como objeto, e ele sempre consegue fazer essas comparações com o objeto.
[06:54] Eu falei que ele fez comparações. É isso mesmo, ele faz comparação. E por que ele faz comparação? Porque ele precisa atualizar os componentes quando um state muda, quando um prop muda, quando alguma coisa muda. E qual é o sentido core, qual é o núcleo, o que nos faz pensar sobre performance em React?
[07:17] É justamente ele renderizar de forma desnecessária, evitarmos que ele renderize de forma desnecessária. Então, é isso que precisamos evitar, e é por isso que precisamos entender bem a fundo como o React funciona, como ele trata esses objetos, como são esses objetos, para conseguirmos entender como evitar essas renderizações.
[07:38] Nos próximos vídeo vamos começar a entrar nisso, vamos começar a entender muito mais sobre o pacote React DOM, que é o pacote que faz essas comparações, vamos ver mais a fundo, e vamos conseguir extrair algumas informações, para conseguirmos deixar o nosso Aluroni ainda mais performático. Então, te vejo nos próximos vídeos.
Lista de arquivos abordados no vídeo: