#reactjs #firebase
#reactjs #firebase
Вопрос:
У меня есть приложение, которое позволяет пользователю зарегистрироваться для учетной записи, а затем выполнять различные действия после входа в систему. После того, как они вошли в систему, одна из вещей, которые они могут сделать, это создать список задач. Я хочу, чтобы этот список задач мог быть отозван пользователем позже, но я не могу понять, как сохранить его в базе данных с конкретным пользователем, который вошел в систему. Я на 100% новичок в firebase / react. Пока я могу сохранить список в совершенно новый документ в облачной базе данных, но не обновлять его для конкретного пользователя.
Спасибо!
Ответ №1:
- Проверьте, вошел ли пользователь в систему
Документы для этого https://firebase.google.com/docs/auth/web/manage-users
const user = firebase.auth().currentUser
if (user) {
// User is logged in
} else {
// No user logged in
}
- Прочитайте задачу, я думаю, это будет состояние компонента
- Запишите состояние в firebase, если предпочитаете firestore. Все это будет внутри
if(user)
https://firebase.google.com/docs/firestore/manage-data/add-data#web-version-9
import { doc, setDoc } from "firebase/firestore";
const docRef = doc(db, 'todoList', uid);
setDoc(cityRef, { todoList: todoListState }, { merge: true });
Ответ №2:
Я надеюсь, что вы используете firestore в качестве базы данных в firebase. Firestore сохраняет всю информацию в виде дерева JSON с иерархией Collection-document, что означает, что внутри коллекции может быть несколько документов, и снова в каждом документе может быть несколько коллекций.
Чтобы сохранить информацию о задачах в Firestore, сначала вам нужно подумать, как вы собираетесь структурировать свою коллекцию и документ для всего приложения. Эта структура также будет зависеть от того, как защитить данные для каждого пользователя.
Ниже приведен пример структуры, которую вы могли бы иметь для базы данных для списка задач
/users/{firebaseUID}/todolist/mylist
в приведенной выше структуре users и todolist являются коллекцией, а firebaseUID и mylist — именами документов. Я указал идентификатор firebaseUID внутри фигурных скобок, потому что он будет разным для каждого пользователя
Чтобы добавить или обновить список для каждого из пользователей, вы передадите следующую информацию
const myListData = // Something
const userId = // ger the data from firebase.auth().currentUser.uid or other options
// hope you know how to get the object of firestore from React Firestore package
// Create
Firestore.doc(`/users/${userId}/todolist/mylist`).create(myListData);
//Update
Firestore.doc(`/users/${userId}/todolist/mylist`).update(myListData);
Комментарии:
1. Мне удалось ввести идентификатор пользователя, но я получаю сообщение об ошибке, которое Firestore.doc это не функция. Это позволит мне использовать firestore.collection, но он сохраняет неправильно, он создает новый документ в качестве идентификатора пользователя
Ответ №3:
Создайте новый ключ в своей базе данных с uid пользователя и вставьте туда список. Например:
db.ref('/users').child(`${user.uid}`).set({list: theList})
Комментарии:
1. здесь говорится, что db.ref не является функцией: (
2. Я думаю, что firebase совсем недавно обновила свой API, поэтому вам может понадобиться использовать что-то вроде
set(ref(db, `/users/${newUser.user.uid}`),{list: theList})