Componentes: De <div> a <View>
No React para a web, o coração de tudo é a componentização de elementos HTML. No React Native, a filosofia é idêntica, mas as peças do nosso quebra-cabeça são outras. Nesta seção, vamos aprender quais são os blocos de construção fundamentais de um aplicativo e como eles se comparam ao que já conhecemos do mundo web.
A Mentalidade é a Mesma, as Ferramentas Mudam
A boa notícia é que você não precisa reaprender a pensar. A ideia de criar componentes pequenos, reutilizáveis e com responsabilidade única continua sendo o pilar do desenvolvimento. Um componente de Card continuará sendo um Card, e um Button continuará sendo um Button. O que muda são os elementos que usamos dentro desses componentes para dar-lhes forma e função.
Traduzindo o HTML para o Nativo
No React Native, não temos acesso a tags HTML como <div>, <p> ou <span>. Em vez disso, importamos um conjunto de componentes essenciais da biblioteca react-native que são traduzidos para os elementos de interface nativos do iOS e do Android.
Os mais importantes são:
<View>: O novo<div>
O<View>é o contêiner mais fundamental para layout. Pense nele como uma<div>sem nenhuma estilização. Ele serve para agrupar outros componentes e organizar a estrutura da sua tela.<Text>: O único lugar para textos
Esta é uma regra de ouro: qualquer texto que você queira exibir na tela precisa, obrigatoriamente, estar dentro de um componente<Text>. Diferente da web, onde textos podem viver soltos, no React Native isso causará um erro.- Outros Essenciais:
<Image>: Para exibir imagens locais ou remotas.<TextInput>: O equivalente ao<input type="text">.<TouchableOpacity>: A forma mais comum de se criar botões e áreas clicáveis, dando um feedback visual de opacidade ao toque.
Veja um exemplo simples que combina esses componentes:
1Renderizando Listas com FlatList
No React para a web, é muito comum usarmos a função .map() para renderizar uma lista. Embora isso funcione no React Native para listas pequenas, pode causar sérios problemas de performance em listas longas. O motivo é que o .map() renderiza todos os itens de uma só vez, consumindo muita memória.
A solução nativa para isso é o componente <FlatList>.
A <FlatList> é inteligente. Ela renderiza apenas os itens que estão visíveis na tela e "recicla" os componentes à medida que o usuário rola a lista. Para usá-la, precisamos passar três props principais:
data: O array de dados que você quer renderizar.renderItem: Uma função que recebe um item do seu array e retorna o componente JSX que deve ser exibido para aquele item.keyExtractor: Uma função que recebe um item e retorna uma string única para ser usada como akeydo React.
Vamos ver um exemplo de uma lista de tarefas:
1Com esses componentes básicos em mãos, você já tem o necessário para construir a estrutura de praticamente qualquer tela de um aplicativo.