#javascript #firebase #google-cloud-firestore
# #javascript #firebase #google-облако-firestore
Вопрос:
Я хочу обновлять поле «прогресс» в документе с автоматически сгенерированным идентификатором (используя fire store) при каждом нажатии кнопки выполнения.
Я пробовал несколько разных способов, но, похоже, ничего не работает. Я прилагаю свой метод:
useEffect(() => {
var user = firebase.auth().currentUser;
var email = user.email;
var documentID = database.collection("ChosenChallenge").doc().id;
database
.collection("Users")
.doc(email)
.collection("ChosenChallenge")
.doc(documentID)
.update({
Progress: percentRange
})
.then(() => {
console.log('added!');
});
}, )
и класс:
import React, { useState, useEffect } from "react";
import './newprogressbar.css';
import { firebaseAppAuth, database } from "../firebase";
import firebase from "firebase/app";
export const ProgressBarContainer = (props) => {
let [percentRange, setProgress] = useState(0);
const handleUpdate = () => {
setProgress(percentRange < 99 ? percentRange 7.14285714 : 100);
props.onChange(percentRange 7.14285714);
}
const Range = (props) => {
return (
<div className="range" style={{width: `${props.percentRange}%`}}/>
);
};
const ProgressBar = (props) => {
return (
<div className="progress-bar">
<Range percentRange={props.percentRange}/>
</div>
);
};
useEffect(() => {
var user = firebase.auth().currentUser;
var email = user.email;
var documentID = database.collection("ChosenChallenge").doc().id;
database
.collection("Users")
.doc(email)
.collection("ChosenChallenge")
.doc(documentID)
.update({
Progress: percentRange
})
.then(() => {
console.log('added!');
});
}, )
return (
<div id="progresscontainer">
<ProgressBar percentRange={percentRange} />
<button id="updatepic" onClick={handleUpdate}>Daily Update</button>
</div>
);
};
Любая помощь высоко ценится!
Ответ №1:
database.collection("ChosenChallenge").doc().id
генерирует новый случайный идентификатор документа каждый раз, когда он вызывается. Он не знает, какой существующий документ вам нужен.
Если вы хотите обновить документ, вы должны знать его существующий идентификатор. Этого не избежать. Если вы не знаете идентификатор, вам нужно будет запросить коллекцию, чтобы найти идентификатор документа на основе того, что вы знаете о содержимом документа.
Если вы не знаете идентификатор и ничего не знаете о содержимом документа для фильтрации запроса, вы застряли, и вам может потребоваться переосмыслить, как вы используете Firestore для этого приложения.