O que é fetch?Explicação sobre a função fetch e como ela é usada para fazer requisições HTTP. Métodos HTTP: GET, POST, PUT, DELETE. Exemplo básico de uso do fetch para buscar dados de uma API pública. Ver aula |
O que é o Firebase e suas funcionalidadesO Firebase é uma plataforma de desenvolvimento de aplicativos criada pelo Google. Ele é especialmente popular para o desenvolvimento de aplicativos móveis (iOS e Android). O Firebase é dividido em várias categorias de funcionalidades, que podem ser usadas de forma combinada ou individual, dependendo das necessidades do projeto. As principais são:
|
FirestoreBanco de dados NoSQL orientado a documentos, onde os dados são armazenados em documentos (semelhantes a objetos JSON) que são organizados em coleções. Isso permite uma estrutura hierárquica e flexível para armazenar dados. Estrutura de dados no Firestore O Firestore organiza os dados em uma estrutura hierárquica composta por:
Exemplo de estrutura |
A URL base para acessar os documentos será: https://firestore.googleapis.com/v1/projects/
Para ativar o Firestore Database, expanda o menu Criação e selecione a opção
clique no botão e depois clique em
→ | ↓ |
Abra o Snack e cole o código abaixo. Copie a URL construída no final da parte 3. O nome da coleção será pessoas
. Insira a URL no local indicado no código.
import React, { useState } from 'react';
import { View, Text, TextInput, Button, StyleSheet } from 'react-native';
export default function App() {
const [nome, setNome] = useState('');
const [email, setEmail] = useState('');
const [message, setMessage] = useState('');
const saveData = async () => {
try {
const newData = {
fields: {
nome: { stringValue: nome },
email: { stringValue: email }
}
};
const response = await fetch('insira a URL aqui', // <-----
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(newData),
}
);
if (response.ok) {
setMessage('Usuário salvo com sucesso!');
setNome('');
setEmail('');
} else {
setMessage('Erro ao salvar usuário.');
}
} catch (err) {
setMessage('Erro ao salvar usuário.');
console.error(err);
}
};
return (
<View style={styles.container}>
<Text style={styles.title}>Adicionar Usuário</Text>
<TextInput
style={styles.input}
placeholder="Nome"
value={nome}
onChangeText={setNome}
/>
<TextInput
style={styles.input}
placeholder="Email"
value={email}
onChangeText={setEmail}
/>
<Button title="Salvar" onPress={saveData} />
{message && <Text>{message}</Text>}
</View>
);
}
const styles = StyleSheet.create({
container: { flex: 1, justifyContent: 'center', alignItems: 'center', padding: 16 },
title: { fontSize: 18, fontWeight: 'bold', marginBottom: 16 },
input: { borderWidth: 1, padding: 8, marginBottom: 8, width: '80%' },
});
Copie a URL construída no final da parte 3. O nome da coleção será pessoas
. Insira a URL no local indicado no código.
import React, { useState, useEffect } from 'react';
import { View, Text, StyleSheet, Button } from 'react-native';
export default function App() {
const [usuarios, setUsuarios] = useState([]);
const [error, setError] = useState(null);
const fetchData = async () => {
try {
const response = await fetch('insira a URL aqui'); // <-----
const data = await response.json();
if (data.documents) {
const usuariosFormatados = data.documents.map((doc) => {
const fields = doc.fields;
return {
id: doc.name.split('/').pop(),
nome: fields.nome.stringValue,
email: fields.email.stringValue,
};
});
setUsuarios(usuariosFormatados);
} else {
setUsuarios([]);
}
} catch (err) {
setError('Erro ao buscar dados do servidor.');
console.error(err);
}
};
useEffect(() => {
fetchData();
}, []);
return (
<View style={styles.container}>
<Text style={styles.title}>Lista de Usuários</Text>
{error && <Text style={styles.error}>{error}</Text>}
{usuarios.length > 0 ? (
usuarios.map((usuario) => (
<Text key={usuario.id}>
{usuario.nome} - {usuario.email}
</Text>
))
) : (
<Text>Nenhum usuário encontrado.</Text>
)}
</View>
);
}
const styles = StyleSheet.create({
container: { flex: 1, justifyContent: 'center', alignItems: 'center',
padding: 16 },
title: { fontSize: 18, fontWeight: 'bold', marginBottom: 16 },
error: { color: 'red', marginBottom: 16 },
});
import React, { useState, useEffect } from 'react';
import { View, Text, StyleSheet, Button, TextInput } from 'react-native';
export default function App() {
const [usuarios, setUsuarios] = useState([]);
const [error, setError] = useState(null);
const [nome, setNome] = useState('');
const [email, setEmail] = useState('');
const [message, setMessage] = useState('');
const firestoreURL = 'https://firestore.googleapis.com/v1/projects/teste-6ef30/databases/(default)/documents/pessoas'
const fetchData = async () => {
try {
const response = await fetch(firestoreURL);
const data = await response.json();
if (data.documents) {
const usuariosFormatados = data.documents.map((doc) => {
const fields = doc.fields;
return {
id: doc.name.split('/').pop(),
nome: fields.nome.stringValue,
email: fields.email.stringValue,
};
});
setUsuarios(usuariosFormatados);
} else {
setUsuarios([]);
}
} catch (err) {
setError('Erro ao buscar dados do servidor.');
console.error(err);
}
};
useEffect(() => {
fetchData();
}, []);
const saveData = async () => {
try {
const newData = {
fields: {
nome: { stringValue: nome },
email: { stringValue: email },
},
};
const response = await fetch(firestoreURL,
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(newData),
}
);
if (response.ok) {
setMessage('Usuário salvo com sucesso!');
setNome('');
setEmail('');
} else {
setMessage('Erro ao salvar usuário.');
}
} catch (err) {
setMessage('Erro ao salvar usuário.');
console.error(err);
}
fetchData()
};
return (
<View style={styles.container}>
<Text style={styles.title}>Adicionar Usuário</Text>
<TextInput
style={styles.input}
placeholder="Nome"
value={nome}
onChangeText={setNome}
/>
<TextInput
style={styles.input}
placeholder="Email"
value={email}
onChangeText={setEmail}
/>
<Button title="Salvar" onPress={saveData} />
{message && <Text style={styles.message}>{message}</Text>}
<Text style={styles.title}>Lista de Usuários</Text>
{error && <Text style={styles.error}>{error}</Text>}
{usuarios.length > 0 ? (
usuarios.map((usuario) => (
<Text key={usuario.id}>
{usuario.nome} - {usuario.email}
</Text>
))
) : (
<Text>Nenhum usuário encontrado.</Text>
)}
</View>
);
}
const styles = StyleSheet.create({
container: {
marginTop:40,
flex: 1,
padding: 16,
},
title: { fontSize: 18, fontWeight: 'bold', marginBottom: 16 },
error: { color: 'red', marginBottom: 16 },
input:{ borderWidth:1, padding:4, marginBottom:8, borderRadius:4},
message:{ color:'red', fontSize: 8, textAlign:'center', padding:4, marginBottom:8}
});
git init git add . git commit -m "código inicial" git branch -M main git remote add origin <repositório criado pelo github classroom> git push -u origin main
deleteUser
` para excluir o documento do banco de dadosgit add . git commit -m "funcionalidade de exclusão de documento implementada" git push
editUser
` para permitir a alteração dos dados do documentogit add . git commit -m "funcionalidade de alteração de documento implementada" git push
git add . git commit -m "novos campos adicionados ao documento" git push
DetailsScreen
`) para exibir todos os detalhes do documentogit add . git commit -m "funcionalidade de alteração de documento implementada" git push origin main
Bom trabalho! 🚀