Aprenda React 18: separando JavaScript e JSX

Em nosso tutorial anterior, vimos como usar JSX para escrever a estrutura de nosso componente resulta em um código mais limpo, curto e fácil de entender em comparação com o uso de JavaScript vanilla.

Até agora, criamos apenas nossos componentes usando JSX, onde não precisamos depender de lógica ou condicionais para determinar a estrutura do componente. Por exemplo, o Country componente simplesmente gera algum texto diretamente com base no props valores que passamos para ele.

Você normalmente terá que fazer pelo menos um pouco de processamento de entrada props dados ao criar componentes React na vida real. Neste tutorial, nosso foco será aprender como fazer isso corretamente, separando JavaScript e JSX.

Usando expressões JavaScript em JSX

O JSX permite incorporar qualquer expressão JavaScript válida, desde que esteja entre chaves. Usamos esse recurso anteriormente para acessar valores do props objeto.

Expressões em JavaScript são pedaços de código que, em última análise, resolvem para um valor. No exemplo acima, props.name resolvido para o nome do país. Poderíamos adicionar o toUpperCase() método para capitalizar o nome do país e ainda funcionaria. Você tem permissão para fazer essas operações simples dentro dos colchetes.

Usando condicionais dentro do JSX

Podemos usar o && operador para renderizar um elemento condicionalmente em JSX com base no valor booleano de uma expressão. Aqui está como funciona. Vamos dizer que você escreve true && expression com as chaves no JSX, isso resolverá expression. Por outro lado, false && expression sempre resolverá false e nada será processado.

Podemos reescrever nosso Country componente para que ele use condicionais para produzir algumas instruções com base no valor booleano.

Nós passamos um democracy prop para ambos os nossos Country componentes. Seu valor padrão tornou-se true já que não lhe atribuímos nenhum valor. Como resultado, props.democracy retornará true. O basicamente significa que a seguinte linha

torna-se efetivamente

Na próxima linha, fazemos algo um pouco mais complicado e verificamos se a população por unidade de área é superior a 200. Se for superior a 200, emitimos uma declaração sobre a densidade populacional.

Você pode usar o operador ternário entre chaves quando quiser renderizar algo independentemente do valor passado avaliado como positivo ou negativo. Foi o que fizemos com o continent suporte. Tente sua própria condicional dentro do JSX de maneira semelhante.

Separando JavaScript e JSX

A beleza do JSX é que ele é fácil de ler e nos permite construir estruturas de componentes complexos facilmente. No entanto, introduzir mais e mais lógica usando chaves é contraproducente. O objetivo é manter o JSX o mais declarativo possível e lidar com a lógica separadamente.

Digamos que queremos listar os cinco maiores estados de um país dentro do nosso componente. Poderíamos passá-los junto com outros valores como prop. Depois disso, podemos iterar sobre a lista de estados e criar um monte de

  • elementos ao longo do caminho. Nós usaremos o map() para criar nossa lista e funcionaria dentro das chaves com JSX também, mas tudo parece mais limpo e será mais fácil de manter a longo prazo quando mantivermos a parte lógica separada.

    Lembre-se também de que você só pode usar expressões dentro das chaves, então codifique com if declarações ou for loops terão que ser colocados fora do JSX de qualquer maneira. Você pode usar expressões de função imediatamente invocadas, mas manter a lógica separada é uma boa prática e muito mais produtiva a longo prazo.

    Pensamentos finais

    O React não visa separar marcação e lógica colocando-os em arquivos separados. Em vez disso, ele depende de componentes para dividir sua interface do usuário em várias entidades que podem funcionar de forma independente. É nosso trabalho manter nossa lógica separada da marcação dentro do componente. A melhor maneira de fazer isso é configurar tudo em JavaScript de antemão e usar JSX para criar nossa interface do usuário com base nos dados finais.

  • Deixe uma resposta