Olá, bem-vindos ao curso de React Native: dominando listas com ScrollView e FlatList. Meu nome é Antônio Carvalho e serei o instrutor nas próximas aulas.
Audiodescrição: Antônio é um homem de pele branca, com cabelo longo e barba. Ele está usando uma camiseta preta da Alura.
Este curso abordará a criação de listas dinâmicas em React Native, utilizando um componente chamado FlatList. Para que este curso seja mais eficaz, é necessário que os participantes tenham alguns conhecimentos prévios. É importante que possuam conhecimentos básicos de React Native, compreendam como funcionam as propriedades e atributos das tags, o funcionamento da passagem de parâmetros usando props, além de hooks como useState e useRef para armazenar estado e consumir APIs. Vamos consumir uma API utilizando uma biblioteca chamada Axios para esse propósito.
Neste curso, não é obrigatório conhecer Axios, mas é importante ter conhecimento sobre HTTP, requisição e resposta para que o curso flua melhor.
Os temas abordados serão a criação de uma lista dinâmica, a refatoração para separar a camada visual da camada de código, a virtualização e renderização usando FlatList para que possamos utilizar o componente. Em seguida, aplicaremos estilos para tornar nossa aplicação mais atraente.
Receberemos os elementos através de uma API REST, utilizando a biblioteca Axios para acessar e trazer os elementos para nossa lista. Desenvolveremos uma aplicação simples, na qual poderemos deslocar, modificar, eliminar, editar e registrar novos elementos. Inicialmente, utilizaremos ScrollView e, posteriormente, FlatList.
Até a próxima!
Bem-vindos a este vídeo. Vamos criar agora uma lista de contatos manual e fixar os elementos na tela. Para isso, vamos criar uma nova aplicação.
Primeiro, vamos criar a aplicação usando o comando npx create-expo-app agenda-contato --template blank-typescript. Este comando cria uma aplicação básica com TypeScript, ideal para nosso projeto.
npx create-expo-app agenda-contato --template blank-typescript
Vou pausar o vídeo e voltaremos quando estiver concluído.
Pronto, voltamos. A pasta está aqui. Vamos acessar o diretório da agenda de contato com o comando cd agenda-contato\.
cd agenda-contato\
Dentro desse diretório, vamos abrir o Visual Studio Code com o comando code ..
code .
Ao abrir o Visual Studio Code na pasta em que estamos trabalhando, podemos visualizar o projeto e seus arquivos. Vamos abrir o arquivo app.tsx, fechar a aba de projetos e inserir os códigos para montar uma lista inicialmente com os elementos fixados na tela.
Vamos começar criando a estrutura básica da nossa aplicação com um container principal:
<View style={styles.container}>
</View>
Agora, vamos adicionar uma View dentro do container para cada contato que queremos exibir. Inicialmente, vamos adicionar apenas uma View vazia:
<View style={styles.container}>
<View></View>
</View>
Em seguida, adicionamos um Text dentro da View para exibir o nome do contato:
<View style={styles.container}>
<View>
<Text></Text>
</View>
</View>
Vamos preencher o Text com o nome "João Silva":
<View style={styles.container}>
<View>
<Text>João Silva</Text>
</View>
</View>
Para cada contato, também precisamos exibir o telefone. Vamos adicionar outro Text para isso:
<View style={styles.container}>
<View>
<Text>João Silva</Text>
<Text>1111-1111</Text>
</View>
</View>
Agora, vamos adicionar mais contatos, como Maria Silva e José Santos, com seus respectivos telefones:
<View style={styles.container}>
<View>
<Text>João Silva</Text>
<Text>1111-1111</Text>
</View>
<View>
<Text>Maria Silva</Text>
<Text>2222-2222</Text>
</View>
<View>
<Text>Jose Santos</Text>
<Text>3333-3333</Text>
</View>
</View>
Se fizermos isso, nossa aplicação vai rodar. Vamos vê-la em execução. Vou abrir a linha de comando e executar npx expo start. Isso vai rodar no celular.
npx expo start
Deixe-me abrir primeiro e mostrar o celular. Aqui está o celular, vamos abrir a aplicação. Ao pressionar A, vai abrir usando o Expo Go. Ele pergunta se queremos instalar o Expo Go. Instalamos a última versão, 5406, e enviamos o comando ao celular usando adb. O celular baixa o Expo Go, envia o APK do Expo Go ao celular, e então o celular instala esse APK. Vou fazer uma pausa enquanto carrega. Quando terminar, volto.
Pronto, voltou. Agora está carregando o arquivo ts. O Expo Go, que roda no celular, manda um sinal ao Metro Bundler, que está aqui, que carrega o arquivo ts para dentro, o bundle, o javascript para dentro do celular. Aqui estão nossos personagens. Fizemos uma lista, mas há uma maneira melhor de fazer isso? Sim, há uma forma melhor. Podemos, em vez de fazer uma lista com os dados fixados dessa maneira, colocar esses dados em uma lista de objetos.
Vamos criar uma lista de objetos chamada contatos. Cada um dos contatos existentes será um objeto dentro dessa lista de contatos. Vamos começar com um array vazio:
const contatos = [];
Agora, vamos adicionar os contatos como objetos dentro desse array:
const contatos = [
{nome: "João Silva", telefone: "1111-1111", email: "joao@teste.com"},
{nome: "Maria Silva", telefone: "2222-2222", email: "maria@teste.com"},
{nome: "Jose Santos", telefone: "3333-3333", email: "jose@teste.com"},
];
Para exibir esses contatos na tela, precisamos transformar cada um desses objetos em um bloco de View, onde haverá um Text para mostrar o nome, outro para o telefone e outro para o e-mail. Vamos criar um pequeno código que vai iterar essa lista de contatos. Podemos fazer isso de forma simples, iterando elemento por elemento, ou usar o forEach.
Primeiro, vamos criar uma lista visual para armazenar os elementos visuais:
const listaVisual = [];
Agora, vamos iterar sobre os contatos e criar os elementos visuais:
for (const contato of contatos) {
listaVisual.push(
<View key={"id-" + contato.id}>
<Text>{contato.nome}</Text>
<Text>{contato.telefone}</Text>
<Text>{contato.email}</Text>
</View>
);
}
Podemos mostrar os componentes assim, mas também podemos mostrá-los em uma lista. Vamos colocar a listaVisual, e esses componentes serão mostrados na tela automaticamente.
return (
<View style={styles.container}>
{listaVisual}
</View>
);
Agora, se perceberem, cada bloco de View precisa ter uma key. Vamos gerar essa key com base em um número ID. Vamos criar um ID para cada um dos objetos que temos aqui:
const contatos = [
{id: 1, nome: "João Silva", telefone: "1111-1111", email: "joao@teste.com"},
{id: 2, nome: "Maria Silva", telefone: "2222-2222", email: "maria@teste.com"},
{id: 3, nome: "Jose Santos", telefone: "3333-3333", email: "jose@teste.com"},
];
Nossa lista está aparecendo, mas podemos melhorar ainda mais esse conteúdo. Podemos fazer um filtro para não mostrar todos esses dados. Vamos usar algumas funções de programação funcional para filtrar os elementos.
Primeiro, vamos adicionar uma caixa de texto para que a pessoa usuária possa escrever o filtro desejado e, em seguida, filtraremos com base na informação escrita. Vamos importar useState do React e criar uma variável para guardar esse useState.
import { useState } from 'react';
const [filtro, setFiltro] = useState<string>("");
Vamos adicionar também um TextInput na tela. Vamos importar o TextInput e desenhar a tela para conter o TextInput.
import { StyleSheet, Text, TextInput, View } from 'react-native';
return (
<View style={styles.container}>
<Text>Digite o nome do contato para filtrar a lista:</Text>
<TextInput value={filtro} onChangeText={setFiltro} />
{listaVisual}
</View>
);
Em vez de fazer um for dessa maneira, vamos usar um recurso de programação funcional. Todas as listas em JavaScript e TypeScript têm funções que servem para transformar a lista. Vamos usar a função filter, que vai receber uma arrow function e um objeto do tipo da lista, que neste caso é um objeto contato.
const listaVisual = contatos
.filter((contato) => contato.nome.includes(filtro))
.map((contato) => (
<View key={"id-" + contato.id}>
<Text>{contato.nome}</Text>
<Text>{contato.telefone}</Text>
<Text>{contato.email}</Text>
</View>
));
Esse é um processo que chamamos de programação funcional, onde os elementos de contato primeiro são filtrados, e na mesma iteração já são transformados em elementos visuais. O resultado é uma lista de elementos visuais contendo esses blocos. Vamos ver como ficou. Estão aí todos os elementos visuais. Se escrevermos, por exemplo, "Maria", mostra apenas Maria. Se escrevermos "Jô", mostra João e José. O filtro está funcionando.
Na próxima aula, faremos um pequeno formulário para que possamos escrever os dados e esses dados sejam introduzidos na lista, para que posteriormente possamos extrair os elementos visuais para funções e preparar tudo para usar o componente Flat List. Muito obrigado e nos vemos na próxima aula.
Olá a todos, bem-vindos à nossa terceira videoaula.
Na segunda videoaula, desenvolvemos a aplicação e inserimos alguns contatos simulados como objetos. Transformamos esses contatos utilizando uma função que emprega filter e map. Agora, vamos discutir um pouco sobre filter e map. Ambos fazem parte da programação funcional. Para que serve a programação funcional? Ela é utilizada para manipular dados, especialmente quando lidamos com grandes volumes de dados. Quando as listas são muito extensas, se precisarmos iterar sobre elas a cada transformação ou aplicação de filtro, geramos um grande número de iterações, o que consome muita memória e processamento de forma desnecessária.
Para começar, vamos ver como configuramos nossa aplicação com alguns contatos simulados. Aqui está o código inicial que usamos:
import { StatusBar } from 'expo-status-bar';
import { useState } from 'react';
import { StyleSheet, Text, TextInput, View } from 'react-native';
const contatos = [
{id: 1, nome: "João Silva", telefone: "1111-1111", email: "joao@teste.com"},
{id: 2, nome: "Maria Silva", telefone: "2222-2222", email: "maria@teste.com"},
{id: 3, nome: "Jose Santos", telefone: "3333-3333", email: "jose@teste.com"},
];
export default function App() {
const [filtro, setFiltro] = useState<string>("");
// const listaVisual = [];
// for (const contato of contatos) {
// listaVisual.push(
// <View key={"id-" + contato.id}>
// <Text>{contato.nome}</Text>
// <Text>{contato.telefone}</Text>
// <Text>{contato.email}</Text>
// </View>
// )
// }
Por volta de 1930, um matemático chamado Alonzo Church introduziu a ideia de criar funções encadeadas para transformar dados. Hoje, utilizamos essas funções na programação funcional. São funções que encadeamos, permitindo iterar sobre elas de uma só vez. Assim, a informação entra na primeira função, como fazemos aqui: ela passa pelo filtro e, na mesma iteração, o resultado do filtro já é mapeado, emitindo um elemento visual no resultado da função. Em teoria, seria apenas uma passagem pelos dados. No entanto, o JavaScript não utiliza esse tipo de passagem única, chamada de passagem lazy (preguiçosa).
filter e map na transformação de contatosAgora, vamos ver como aplicamos filter e map para transformar nossos contatos em elementos visuais:
const listaVisual = contatos
.filter( ( contato ) => { return contato.nome.includes(filtro) } )
.map( (contato ) => {return (
<View key={"id-" + contato.id}>
<Text>{contato.nome}</Text>
<Text>{contato.telefone}</Text>
<Text>{contato.email}</Text>
</View>
) } )
Existem dois tipos de ação com funções de programação funcional: lazy e eager (ansiosa). Eager é quando as ações são executadas em cada função de forma antecipada, enquanto lazy guarda todas as execuções para serem realizadas de uma vez ao final. O JavaScript não possui isso por natureza, mas existe uma biblioteca, a slickgithub.io, que permite interações de programação funcional com JavaScript. Essa biblioteca possibilita o uso do acesso lazy em JavaScript. Apenas para conhecimento, a programação funcional está presente em várias outras linguagens, como Python, JavaScript, TypeScript, Kotlin e Java, e é amplamente utilizada, especialmente para lidar com grandes conjuntos de dados.
Vamos entender o que realmente fizemos aqui. A informação estava em uma lista com: João, telefone, e-mail, Maria, Alberto. Primeiro, aplicamos o filter. O filter verifica o que está escrito no campo de texto por meio desta variável, filtro. Ele analisa o que está escrito no campo de texto e executa a ação de filtragem para selecionar quais elementos participarão da próxima etapa. Após essa ação de filtro, os elementos são passados para o mapeamento. O ideal seria que isso ocorresse em uma única iteração, mas acontece em várias iterações. Dessa forma, a informação é transformada em elementos visuais, como estão aqui. O objeto é transformado em uma view pelo mapeamento, e antes de criar o mapeamento, filtramos. Claro que a ordem influencia: se primeiro transformarmos tudo e depois filtrarmos, estaremos gastando uma ação de transformação desnecessária em alguns objetos que não serão exibidos na tela ao final.
Isso é tudo. Muito obrigado e nos vemos no próximo vídeo, onde faremos o deslocamento da tela. Até breve!
O curso React Native: Dominando Listas com FlatList e ScrollView possui 144 minutos de vídeos, em um total de 31 atividades. Gostou? Conheça nossos outros cursos de React Native em Mobile, ou leia nossos artigos de Mobile.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
O Plano Plus evoluiu: agora com Luri para impulsionar sua carreira com os melhores cursos e acesso à maior comunidade tech.
2 anos de Alura
Matricule-se no plano PLUS 24 e garanta:
Jornada de estudos progressiva que te guia desde os fundamentos até a atuação prática. Você acompanha sua evolução, entende os próximos passos e se aprofunda nos conteúdos com quem é referência no mercado.
Programação, Data Science, Front-end, DevOps, Mobile, Inovação & Gestão, UX & Design, Inteligência Artificial
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
Acesso à inteligência artificial da Alura.
No Discord, você participa de eventos exclusivos, pode tirar dúvidas em estudos colaborativos e ainda conta com mentorias em grupo com especialistas de diversas áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Luri Vision chegou no Plano Pro: a IA da Alura que enxerga suas dúvidas, acelera seu aprendizado e conta também com o Alura Língua que prepara você para competir no mercado internacional.
2 anos de Alura
Todos os benefícios do PLUS 24 e mais vantagens exclusivas:
Chat, busca, exercícios abertos, revisão de aula, geração de legenda para certificado.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.
Para quem quer atingir seus objetivos mais rápido: Luri Vision ilimitado, vagas de emprego exclusivas e mentorias para acelerar cada etapa da jornada.
2 anos de Alura
Todos os benefícios do PRO 24 e mais vantagens exclusivas:
Catálogo de tecnologia para quem é da área de Marketing
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais de forma ilimitada.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.
Conecte-se ao mercado com mentoria individual personalizada, vagas exclusivas e networking estratégico que impulsionam sua carreira tech para o próximo nível.