我正在努力弄清楚如何在我的防火墙数据库中创建的文档中添加时间戳。
我已经阅读并尝试了this post中的每一个建议。
我已经阅读了那篇文章上的文档链接,我无法理解我应该尝试实现的步骤,以便记录文档创建日期的时间戳。
在我的防火墙设置中:
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()};(注:我的消防局被保存为fsDB),
我收到一个错误,上面说:
TypeError: Cannot read property 'serverTimestamp' of undefined我想(因为我定义配置的方式)这个表达式可能意味着阅读:
this.state = {createdAt: fsDB.FieldValue.serverTimestamp()};但这会产生相同的错误消息。
火源支援票的建议建议:
createdAt: firebase.firestore.Timestamp.now(); 当我尝试的时候,我得到一个错误,上面写着:
TypeError:无法读取未定义的属性“时间戳”
很高兴知道如何在消防局中使用时间戳。
消防队的医生说:
变量docRef =db.collection(‘objects’).doc(‘some’);
// Update the timestamp field with the value from the server
var updateTimestamp = docRef.update({
timestamp: firebase.firestore.FieldValue.serverTimestamp()
});当我尝试的时候,我得到一个错误,上面写着:
TypeError:无法读取未定义的属性“FieldValue”
我尝试过这些方法中的每一种设置初始值,也尝试用值单独尝试setState。他们都不管用。
下面根据Murray R的建议,我尝试了这两行注释,如图所示和{}和in ()中所示。这些尝试都不起作用(页面不会呈现其中包含的错误(编译失败,预期失败;错误消息)。我已经撒了水,在每一个地方,我都能想到把它们放进去,但不能让这种方法起作用。
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);
});
};发布于 2019-05-13 15:42:59
要获得Firestore时间戳,正确的调用是firebase.firestore.FieldValue.serverTimestamp()。这里有一个问题:这个方法只在DocumentReference .set()或.update()调用(或者,我相信是CollectionReference .add())中使用。例如,当向"contact“集合添加新文档时,在将新属性'createdAt‘传递给.add()方法时,可以将它与新属性’createdAt‘组合在一起:
handleFormSubmit(event) {
// Now, you're getting form state here!
console.log("SUCCESS!! :-)\n\n", formState);
fsDB
.collection("contact")
.add({
...formState,
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);
});
}https://stackoverflow.com/questions/56035174
复制相似问题