Cursos / Informática para Internet / Desenvolvimento para Dispositivos Móveis / Aula
Agora vamos iniciar de maneira efetiva a construção da tela de posts carregando as informações que serão exibidas na tela. Os dados que serão utilizados serão carregados de uma API criada na disciplina de desenvolvimento back-end.
Os dados carregados precisam ser armazenados em um estado para serem utilizados em nosso aplicativo. Além disso, precisamos de outro estado que informe se os dados concluíram o carregamento.
Então, em seu arquivo, crie os estados abaixo:
const [posts, setPosts] = useState([])
const [isLoading, setLoading] = useState(true)
Para carregar dados, iremos criar uma função assíncrona e nela utilizaremos o fetch. Os dados carregados serão armazenados no estado criado anteriormente.
Acompanhe a aula e implemente a função abaixo:
const getPostsAPI = async () => {
try {
setLoading(true)
const response = await fetch('https://dev-backend-imd.herokuapp.com/api/posts')
const posts = await response.json()
setPosts(posts.posts)
} catch (error) {
alert('Falha ao carregar postagens. Tente novamente mais tarde.')
setPosts([])
} finally {
setLoading(false)
}
}
Essa função criada deve ser chamada quando o aplicativo iniciar. Então, utilizaremos para isso o Hook UseEffect( ).
Veja abaixo:
useEffect(() => {
getPostsAPI()
}, [])
Com os dados já carregados, agora podemos iniciar a listagem dos itens. Nesse aplicativo, utilizaremos o FlatList.
Acompanhe a aula e produza o código abaixo:
import React, { useEffect, useState } from 'react'
import { View, StyleSheet, FlatList } from 'react-native'
export default function Home() {
const [posts, setPosts] = useState([])
const [isLoading, setLoading] = useState(true)
const getPostsAPI = async () => {
try {
setLoading(true)
const response = await fetch('https://dev-backend-imd.herokuapp.com/api/posts')
const posts = await response.json()
setPosts(posts.posts)
} catch (error) {
alert('Falha ao carregar postagens. Tente novamente mais tarde.')
setPosts([])
} finally {
setLoading(false)
}
}
useEffect(() => {
getPostsAPI()
}, [])
return (
<View style={styles.container}>
<FlatList data={posts}></FlatList>
</View>
)
}
const styles = StyleSheet.create({
container: {
width: '100%',
height: '100%',
backgroundColor: 'red'
}
})
Versão 5.3 - Todos os Direitos reservados