Logo Passei Direto
Material
Study with thousands of resources!

Text Material Preview

5ºAula
React Native IV
Objetivos de aprendizagem
Ao término desta aula, vocês serão capazes de:
• entender o que são os estados dos componentes e o ciclo de vida de renderização;
• construir uma aplicação com uma lista de nomes.
Olá, 
Na aula anterior foram apresentados os elementos 
básicos do React Native, também foi demonstrado como criar 
componentes que podem ser reaproveitados e como trocar 
informações entre componentes através das propriedades.
Nesta aula, veremos os estados dos componentes e 
como eles se comportam quando são alterados, além do 
desenvolvimento de uma aplicação utilizando os estados.
Leia atentamente esta aula e se tiver alguma dúvida, use os 
recursos que estão na sua área do aluno.
Bons estudos!
28Programação para Dispositivos Móveis
Seções de estudo
1– State
2– Aplicação Prática
1- State
O State (Estado) é a parte dinâmica de um componente 
do React Native. Nele será declarado o estado inicial do 
componente, e todas as mudanças que podem acontecer 
durante o tempo. (BODUCH, 2017).
Um exemplo de funcionamento do State se dá quando 
iniciamos o estado do componente com um array vazio, 
esse seria o estado inicial (Initial State). Com a utilização da 
aplicação esse array vai recebendo dados, nesse caso há uma 
troca de estado (setState), tanto no estado inicial quanto a 
cada alteração do estado do componente ele automaticamente 
se renderiza novamente.
O exemplo acima é descrito grafi camente na Figura 1.
 
Figura 1 – Ciclo de renderização. Fonte: BODUCH,2017.
 
Na aula anterior foi apresentado o conceito das 
propriedades (Props) de um componente, que são responsáveis 
por passar informação entre componentes. As propriedades 
se diferem dos estados porque elas não são alteradas após a 
renderização inicial do componente.
Enquanto os estados podem ser alterados dentro do 
próprio componente somente o componente pai pode decidir 
quando alterar a propriedade e renderizar novamente o JSX 
com a nova propriedade. 
Col (2019) defi ne o State como valores que são utilizados 
em componentes que quando alterados causam o efeito de 
renderização instantânea, permitindo maior dinâmica e 
reatividade para aplicações.
Para manipular os estados foi introduzido no React 
Native o Hook useState. Com essa função é mais fácil declarar 
uma variável no State do componente.
Para utilizar o Hook useState primeiro se faz necessário 
importá-lo da biblioteca React.
import React, { useState } from 
“react”;
A declaração do State se dá no código abaixo, onde 
counter é o nome da variável que estamos criando, 
setCounter é a função que deverá ser chamada quando for 
necessário alterar o estado e dentro de useState é defi nido o 
valor inicial do estado no caso 0.
const [counter, setCounter] = 
useState(0);
O contador criado pode ser utilizado para, por exemplo, 
incrementar e exibir o número de vezes que um botão é 
clicado. Então no evento onPress do botão é realizada 
a chamada ao setCounter. A cada clique então o estado é 
alterado e o componente é renderizado novamente, e o novo 
valor do contador é exibido em um Text. 
O código abaixo, cujo resultado pode ser visualizado na 
Figura 2, tem dois botões um que incrementa o contador e 
outro que zera o contador. Ambos ao serem pressionados 
atualizam o valor do State e o componente é então renderizado 
para exibir o novo valor no Text.
import React, { useState } from 
“react”;
import { View, Text, Button } from 
‘react-native’;
export default function App() {
 const [counter, setCounter] = 
useState(0);
 return (
 <View style={{ paddingTop: 50 
}}>
 <Text>{counter}</Text>
 <View style={{ fl exDirection: 
‘row’ }}>
 <Button 
 title=”Contar”
 onPress={() => 
setCounter(counter + 1)}
 />
 <Button
 title=”Zerar”
 color=”#f194ff”
 onPress={() => 
setCounter(0)}
 />
 </View>
 </View>
 );
}
Figura 2 – Contador com State. Fonte: Acervo pessoal.
Pode ser interessante em determinadas situações criar 
um Hook personalizado que irá isolar a lógica do Hook 
29
em um lugar diferente permitindo, inclusive, ser reutilizado 
para outros componentes, essa técnica é conhecida como 
LogicHooks. 
No caso do contador deve-se criar uma função, que por 
padrão deve usar o prefi xo use, e dentro dela criar a constante 
com o useState e criar também a função que irá conter a lógica 
do Hook. Ambas serão retornadas na função.
const useCounter = (initValue) => {
 const [value, setValue] = 
useState(initValue);
 const setCounter = () => {
 setValue(value + 1);
 };
 return [value, setCounter];
};
Dentro do componente para utilizar essa versão basta 
fazer como no Hook normal, modifi cando agora o nome para 
o useCounter.
const [counter, setCounter] = 
useCounter(0);
E no botão basta chamar o setCounter que ele já irá 
incrementar e exibir como esperado.
2- Aplicação Prática
Nesse momento você já é capaz de criar um componente 
próprio, passar informação para ele utilizando as propriedades 
e renderizá-lo novamente utilizando os estados. Nesta seção, 
vamos fazer então a primeira aplicação prática desta disciplina, 
criar uma lista de pessoas.
O primeiro passo é criar o componente que irá conter os 
itens da lista. Cada item terá uma View que delimita o espaço 
que o texto de quantidade do primeiro nome e o segundo 
nome da pessoa irá ocupar. Através das propriedades esse 
componente irá receber essas informações.
import React from ‘react’;
import { StyleSheet, Text, View} from 
‘react-native’;
export default function AppItem(props) 
{
 return (
 <View style={styles.container}>
 <Text style={styles.
textItem}>{props.nome} - </Text>
 <Text style={styles.
textItem}>{props.sobrenome}</Text>
 </View>
 );
}
Para deixar uma interface mais amigável os estilos para a 
View e os Texts serão criados separadamente, com um detalhe, 
o conteúdo da View será exibido em linha (fl exDirection: 
‘row’) e terá uma borda na base com a cor cinza.
const styles = StyleSheet.create({
 container: {
 fl exDirection: ‘row’,
 backgroundColor: ‘#fff’,
 borderBottomWidth: 1,
 borderBottomColor: ‘#CCC’,
 paddingBottom: 10,
 marginTop: 30,
 width: ‘100%’
 },
 textItem: {
 fontSize: 20,
 }
});
Esse código é colocado dentro do arquivo AppItem.js 
que está dentro da pasta components e será importado dentro 
do arquivo principal para exibir os itens da lista de compras.
import AppItem from ‘./components/
AppItem’;
Utilizando o useState vamos criar um estado que irá 
receber um array de itens que serão exibidos na aplicação. 
Inicialmente esse array estará vazio.
const [items, setItems] = 
useState([]);
E um botão será incluído para adicionar um nome 
aleatório sempre que for pressionado. Esse nome aleatório 
será obtido a partir de uma API disponível em: https://
gerador-nomes.herokuapp.com/ nela quando passados na url 
/nome/aleatorio retorna um array com o nome completo de 
uma pessoa Ex: [“Davide”,”Miranda”,”Damasceno”].
Para receber as informações da API utilizamos a 
função fetch, que recebe como parâmetro a url que deve ser 
‘acessada’. Quando essa função termina, ela executa o then 
que é disparado quando tem uma resposta correta da url 
chamada, em seguida o método json é chamado que converte 
a resposta do fetch para um objeto que o JavaScript vai 
entender.
Quando o objeto é recebido corretamente, ele é 
concatenado junto com os itens que já estão no estado, que 
então renderiza a tela novamente incluindo o item na lista.
<Button
 title=”Adicionar Item”
 color=”#f194ff”
 onPress={() => {
 fetch(‘https://gerador-nomes.
herokuapp.com/nome/aleatorio’)
 .then(response => response.
json())
30Programação para Dispositivos Móveis
 .then(json => {
 setItems(items.concat({id:items.
length+1, nome:json[0], 
sobrenome:json[1]}));
 });
 }}
/>
A exibição da lista de nomesé feita utilizando a função 
map do JavaScript, ela é responsável por ‘percorrer’ o array 
de items e para cada um dos itens fazer a construção do 
AppItem, o componente que foi criado. São passados para o 
componente uma key, que deve ser única para cada elemento 
da lista, o nome e o sobrenome.
items.map(item => {
return <AppItem key={item.id} 
nome={item.nome} sobrenome={item.
sobrenome} />
})
É possível ainda colocar um botão para zerar a lista de 
nomes que foi carregada, começando ela do zero. 
O arquivo App.js completo e o resultado a ser exibido na 
interface para o usuário podem ser analisados abaixo.
import React, { useState } from 
“react”;
import { View, Button } from ‘react-
native’;
import AppItem from ‘./components/
AppItem’;
export default function App() {
 const [items, setItems] = 
useState([]);
 return (
 <View style={{ paddingTop: 40 }}>
 <Button
 title=’Limpar Lista’
 onPress={() => setItems([])}
 />
 <Button
 title=”Adicionar Item”
 color=”#f194ff”
 onPress={() => {
 fetch(‘https://gerador-
nomes.herokuapp.com/nome/aleatorio’)
 .then(response => response.
json())
 .then(json => { 
setItems(items.concat({id:items.
h+1,nome:json[0],sobrenome:json[1]}));
 });
 }}
 />
 {items.map(item => {
 return <AppItem key={item.
id} nome={item.nome} sobrenome={item.
sobrenome} />
 })}
 </View>
 );
}
Figura 3 – Lista de Nomes. Fonte: Acervo pessoal.
Chegamos ao fi nal da quinta aula. Vamos recordar?
Retomando a aula
1– State
Na primeira seção foi demonstrada a utilização de estados 
que possibilitam a renderização do componente sempre que 
o estado dele é alterado. Foi feito também uma diferenciação 
com as propriedades.
2– Aplicação Prática
Na segunda seção foi exemplifi cada a criação de uma 
aplicação que funciona como uma lista de nomes, cada vez 
que um botão é pressionado um nome é incluído no estado 
do componente da lista que é chamado para ser renderizado 
novamente.
Col, A. D. In: React Native Basics: Props & States, 
2019. Disponível em: https://devsamurai.com.br/react-
native-basics-props-states/. Acesso em: 24 jun. 2020.
Vale a pena acessar
PINHO, D. M.; ESCUDELARIO, B. React Native 
Desenvolvimento de aplicativos mobile com React. Editora Casa do 
Código, São Paulo, 2020.
EISENMAN, B. Learning React Native: Building Native 
Mobile Apps with JavaScript. O’Reilly Media, 2015.
BODUCH, A. React and React Native. Packt Publishing, 
2017.
LEBENSOLD, J. React Native Cookbook: Bringing the 
Web to Native Platforms. O’Reilly Media, 2018.
Vale a pena ler
Vale a pena