Я пытаюсь выяснить, как добавить метки времени к документам, созданным в моей базе данных firestore.
Я прочитал и попробовал каждое из предложений в этом сообщении .
Я прочитал ссылки на документацию в этом посте и не могу понять шаги, которые я должен попытаться реализовать, чтобы записать метку времени для даты создания документа.
В моих настройках Firebase у меня есть:
firebase.initializeApp(config);
const database = firebase.database();
const fsDB = firebase.firestore();
const settings = { timestampsInSnapshots: true };
export { firebase, database as default, fsDB, settings };
Я действительно не уверен, что const настроек необходим, потому что многие посты по этому вопросу предполагают, что теперь это какая-то настройка по умолчанию в FireBase (яне могу найти документацию по firebase по этому вопросу).
Тогда, в моей форме, у меня есть:
import * as firebase from '../../../firebase';
import { fsDB } from "../../../firebase";
Я не уверен, почему необходимо импортировать эти файлы firebase напрямуюпотому что они находятся в точке входа в приложение, но несколько постов предложили это.
class Preregistration extends React.Component {
constructor(props) {
super(props);
this.state = {selectedValue: null};
this.state = {createdAt: firebase.database.serverTimestamp()};
}
render() {
return (
<div>
<h1>Hello, world!</h1>
<h2>It is {this.state.createdAt.toLocaleTimeString()}.</h2>
</div>
);
}
}
export default Preregistration;
Я также пробовал:
this.state = {createdAt: firebase.fsDB.serverTimestamp()};
this.state = {createdAt: firebase.firestore.FieldValue.serverTimestamp()};
this.state = {createdAt: firebase.FieldValue.serverTimestamp()};
Ни один из этих подходов не работает.Должен быть простой способ добавить метку времени в документ, чтобы я мог отслеживать, когда они были созданы.Почему так сложно понять, как это сделать?
Когда я пытаюсь:
this.state = {createdAt: firebase.fsDB.FieldValue.serverTimestamp()};
(обратите внимание - мой firestore сохраняется как fsDB),
Iполучить ошибку, которая говорит:
TypeError: Cannot read property 'serverTimestamp' of undefined
Я подумал, может быть (из-за способа, которым я определяю свою конфигурацию) выражение может означать:
this.state = {createdAt: fsDB.FieldValue.serverTimestamp()};
, но это выдает то же самоесообщение об ошибке
Совет по обращению в службу поддержки Firebase предлагает:
createdAt: firebase.firestore.Timestamp.now();
При попытке получить сообщение об ошибке:
TypeError: Невозможно прочитать свойство 'Timestamp'of undefined
Было бы здорово узнать, как использовать временные метки в пожарном хранилище.
Документы Firebase говорят:
var docRef = db.collection ('objects').doc ('some-id');
// Update the timestamp field with the value from the server
var updateTimestamp = docRef.update({
timestamp: firebase.firestore.FieldValue.serverTimestamp()
});
Когда я пытаюсь это сделать, я получаю сообщение об ошибке:
TypeError: Невозможно прочитать свойство 'FieldValue' из неопределенного
Я пробовал каждую из этих вещей, устанавливая как начальное значение, так и отдельную попытку setState со значением.Ни один из них не работает.
Принимая предложение Мюррея, приведенное ниже, я попробовал обе эти закомментированные строки, как показано и в {}, и в ().Ни одна из этих попыток не работает (страница не будет отображаться для ошибок, содержащихся в них (не удалось скомпилировать, ожидается; сообщения об ошибках). Я высыпал, в каждом месте я могу думать, чтобы положить их, но не могу получить этоподход к работе.
handleSubmit = (formState, { resetForm }) => {
// Now, you're getting form state here!
console.log("SUCCESS!! :-)\n\n", formState);
fsDB
.collection("contact")
.add(formState)
// .set createdAt: firebase.firestore.FieldValue.serverTimestamp()
// .add createdAt: firebase.firestore.FieldValue.serverTimestamp()
.then(docRef => {
console.log("docRef>>>", docRef);
this.setState({ selectedValue: null });
resetForm(initialValues);
})
.catch(error => {
console.error("Error adding document: ", error);
});
};