Hoje no quinto artigo da nossa série de artigos sobre React Native, vamos realizar a chamada em nossa API para recuperar a lista de produtos em oferta. Relembrando, estamos desenvolvendo um aplicativo que lista ofertas, promoções e desconto em produtos, pegando essas informações de uma API. No artigo anterior Como criar uma lista de produtos com React Native, nós vimos como criar a UI da lista de produtos. Neste artigo vamos ver como recuperar a lista de produtos pela API, e como inserir estes produtos na interface criada.
O primeiro passo será instalar o pacote axios, este pacote é um cliente HTTP que pode ser utilizado no Node.Js. Um HTTP client é utilitário que pode realizar requisições em endereços utilizando o protocolo HTTP. Para a instalação do axios, utilize o comando abaixo no terminal na raiz do projeto.
npm install --save axios
Agora abra seu editor de códigos e no abra o arquivo: components/PromotionsList/index.js.
O primeiro passo é importar o axios em nossa aplicação.
import axios from 'axios'
Depois vamos modificar nosso componente PromotionsList para realizar a requisição. Na classe do componente vamos utilizar o método: componentDidMount.
O componentDidMount faz parte dos métodos do ciclo de vida de um componente React. Não vou aprofundar aqui sobre o ciclo de vida de um componente React, para maiores detalhes veja na documentação oficial. Em resumo o método componentDidMount, é executado depois que a saída do componente React, foi renderizada para o DOM.
Vamos no nosso objeto state, definir a chave data como um array vazio. Nesta chave será onde ficará nossa lista de produtos.
state = {
data: []
}
Após isto vamos no método componentDidMount, utilizar o client HTTP axios para realizar a requisição em nossa API REST com o método GET, para recuperar a listagem de produtos que será exibida.
Para este nosso projeto, criei uma API HTTP REST simples utilizando o PHP. Em breve vou criar uma série de artigos apresentando o passo a passo para criar esta API. A URL da API é a seguinte: https://irias.com.br/tutorials/react-native/api.php.
Depois de recuperar a lista de produtos da API, vamos utilizar a função setState para adicionar a lista a nossa chave data do objeto state.
componentDidMount() {
axios.get('https://irias.com.br/tutorials/react-native/api.php').then(response => {
this.setState({ data: response.data })
}).catch(() => {
console.log('Error retrieving data')
})
}
Com isso terminamos a listagem, não será necessário modificar mais nada em nosso componente. Por fim nosso componente PromotionsList ficará do seguinte modo:
import React, { Component } from 'react'
import { FlatList } from 'react-native'
import Styles from './styles'
import PromotionCard from './../PromotionCard'
import axios from 'axios'
class PromotionsList extends Component {
state = {
data: []
}
componentDidMount() {
axios.get('https://irias.com.br/tutorials/react-native/api.php').then(response => {
this.setState({ data: response.data })
}).catch(() => {
console.log('Error retrieving data')
})
}
render() {
return(
<FlatList
style={ Styles.promotionsList }
data={ this.state.data }
renderItem={ ({ item }) => (
<PromotionCard data={ item } />
)}
keyExtractor={ item => item.id }
/>
)
}
}
export default PromotionsList
Antes de finalizar o artigo, vamos realizar uma pequena alteração na estilização do nosso componente Header. Vamos adicionar uma borda e um efeito de elevação em nosso Header, assim irá parecer que a lista de produtos passa por debaixo do cabeçalho. Nosso arquivo components/Header/styles.js ficará do seguinte modo:
import { StyleSheet } from 'react-native'
export default StyleSheet.create({
sectionHeader: {
flexDirection: 'row',
justifyContent: 'space-between',
paddingVertical: 15,
paddingHorizontal: 15,
alignItems: 'center',
backgroundColor: '#ffffff',
shadowColor: "#000",
shadowOffset: {
width: 0,
height: 2
},
shadowOpacity: 0.25,
elevation: 5,
},
logoIcon: {
width: 110,
height: 20
}
})
Ao finalizar nossa aplicação ficará com a seguinte aparência.

Assim concluímos mais uma etapa do nosso projeto que já está quase chegando ao fim.
O projeto está disponível em meu GitHub: https://github.com/andersonirias/react-native-tutorial.

Um comentário em “Consumindo dados de uma API REST com React Native”