首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防火墙.防火墙createdAt时间戳.反应

防火墙.防火墙createdAt时间戳.反应
EN

Stack Overflow用户
提问于 2019-05-08 07:00:31
回答 1查看 3.8K关注 0票数 3

我正在努力弄清楚如何在我的防火墙数据库中创建的文档中添加时间戳。

我已经阅读并尝试了this post中的每一个建议。

我已经阅读了那篇文章上的文档链接,我无法理解我应该尝试实现的步骤,以便记录文档创建日期的时间戳。

在我的防火墙设置中:

代码语言:javascript
复制
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文档)。

然后,以我的形式,我有:

代码语言:javascript
复制
import * as firebase from '../../../firebase';
import { fsDB } from "../../../firebase";

我不知道为什么需要直接导入这些firebase文件,因为它们在应用程序入口点,但是有几个帖子建议这样做。

代码语言:javascript
复制
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;

我也尝试过:

代码语言:javascript
复制
this.state = {createdAt: firebase.fsDB.serverTimestamp()};

this.state = {createdAt: firebase.firestore.FieldValue.serverTimestamp()};


this.state = {createdAt: firebase.FieldValue.serverTimestamp()};

这些方法都不起作用。必须有一种简单的方法将时间戳添加到文档中,以便我可以监视它们何时创建。为什么这么难搞清楚怎么做呢?

当我尝试:

代码语言:javascript
复制
this.state = {createdAt: firebase.fsDB.FieldValue.serverTimestamp()};

(注:我的消防局被保存为fsDB),

我收到一个错误,上面说:

代码语言:javascript
复制
TypeError: Cannot read property 'serverTimestamp' of undefined

我想(因为我定义配置的方式)这个表达式可能意味着阅读:

代码语言:javascript
复制
this.state = {createdAt: fsDB.FieldValue.serverTimestamp()};

但这会产生相同的错误消息。

火源支援票的建议建议:

代码语言:javascript
复制
createdAt: firebase.firestore.Timestamp.now(); 

当我尝试的时候,我得到一个错误,上面写着:

TypeError:无法读取未定义的属性“时间戳”

很高兴知道如何在消防局中使用时间戳。

消防队的医生说:

变量docRef =db.collection(‘objects’).doc(‘some’);

代码语言:javascript
复制
// 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 ()中所示。这些尝试都不起作用(页面不会呈现其中包含的错误(编译失败,预期失败;错误消息)。我已经撒了水,在每一个地方,我都能想到把它们放进去,但不能让这种方法起作用。

代码语言:javascript
复制
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);
      });
  };
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-13 15:42:59

要获得Firestore时间戳,正确的调用是firebase.firestore.FieldValue.serverTimestamp()。这里有一个问题:这个方法只在DocumentReference .set().update()调用(或者,我相信是CollectionReference .add())中使用。例如,当向"contact“集合添加新文档时,在将新属性'createdAt‘传递给.add()方法时,可以将它与新属性’createdAt‘组合在一起:

代码语言:javascript
复制
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);
      });
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56035174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档