Nessa aula você irá aprender a consumir APIs no React Native e verá que é bem simples, assim como fazemos no React na web.
A primeira coisa a fazer é instalar o axios, a biblioteca que usaremos para as requisições:
yarn add axios
Vamos também criar uma tela para o código dessa aula em um novo arquivo chamado UsingApisScreen.js na pasta “screens”. A princípio vamos apenas adicionar uma tela simples com um botão de voltar:
import { useNavigation } from "@react-navigation/native";
import Container from "../components/Container";
import StyledButton from "../components/StyledButton";
import StyledTitle from "../components/StyledTitle";
export default function UsingApisScreen() {
const navigation = useNavigation()
const navigateBack = () => {
navigation.goBack()
}
return (
<Container>
<StyledTitle>Consumindo APIs</StyledTitle>
<StyledButton onPress={navigateBack}>Voltar</StyledButton>
</Container>
)
}
E depois vamos incluir esse componente no StackNavigator.js como uma nova tela e também criar um botão para acessá-lo em HomeScreen.js:
StackNavigator.js
// ...
import StyledComponentsScreen from "./screens/StyledComponentsScreen"
import UsingApisScreen from "./screens/UsingApisScreen"
const Stack = createNativeStackNavigator()
// ...
<Stack.Screen name="Styled" component={StyledComponentsScreen} />
<Stack.Screen name="API" component={UsingApisScreen} />
</Stack.Navigator>
</NavigationContainer>
)
}
HomeScreen.js
// ...
const toStyledComponentsScreen = () => {
navigation.navigate('Styled')
}
const toApiScreen = () => {
navigation.navigate('API')
}
return (
<Container>
<StyledTitle>Olá, mundo!</StyledTitle>
<StatusBar style="auto" />
<NavButton text="Aula de Navegação" onPress={toNavigationScreen} />
<NavButton text="Aula de ScrollView" onPress={toScrollViewScreen} />
<NavButton text="Aula de FlatList" onPress={toFlatListScreen} />
<NavButton text="Aula de Styled Components" onPress={toStyledComponentsScreen} />
<NavButton text="Aula de Consumo de APIs" onPress={toApiScreen} />
</Container>
)
}
Com toda a estrutura pronta, vamos de fato realizar a chamada a uma API uilizando o axios. Para isso, dentro do componente UsingApisScreen iremos criar um estado para armazenar a resposta da API e renderizá-la na tela:
Obs.: aqui estamos usando alguns estilos apenas para deixar a tela mais agradável.
import axios from "axios";
import { useNavigation } from "@react-navigation/native";
import { useEffect, useState } from "react";
import { Image, StyleSheet, Text } from "react-native";
import Container from "../components/Container";
import StyledButton from "../components/StyledButton";
import StyledTitle from "../components/StyledTitle";
export default function UsingApisScreen() {
const [user, setUser] = useState({})
const navigation = useNavigation()
const navigateBack = () => {
navigation.goBack()
}
const fetchGithubUser = async () => {
const res = await axios.get('<https://api.github.com/users/julianaconde>')
setUser(res.data)
}
useEffect(() => {
fetchGithubUser()
}, [])
return (
<Container>
<StyledTitle>Consumindo APIs</StyledTitle>
<Text style={styles.text}>{user.name}</Text>
<Text>{user.bio}</Text>
<Image source={{ uri: user.avatar_url }} style={styles.avatar} />
<StyledButton onPress={navigateBack}>Voltar</StyledButton>
</Container>
)
}
const styles = StyleSheet.create({
avatar: {
alignSelf: 'center',
borderRadius: 999,
height: 200,
width: 200,
marginVertical: 20
},
text: {
fontSize: 20,
marginTop: 20,
textAlign: 'center'
}
})