如何在响应中将json推送到Mobx的数组状态

时间:2019-07-05 10:26:23

标签: javascript reactjs mobx

我现在在使用Firebase的React中使用mobx。
首先,有一个'projectState'作为空数组。
其次,从Firestore获取数据后,将其推入Mobx状态。
这是我的代码。

 @observable projectState = {
    projects: []
  };

  projectGet = () => {
    firebase
      .firestore()
      .collection("projects")
      .doc("DkBFcdAOAWWl8Az")
      .get()
      .then(done => {
        const projectsTotal = JSON.stringify(done.data());
        this.projectState.projects.push(projectsTotal);

      });
  };

'done.data()'给出如下的json类型文件。

{"id": "3", "title": "good"}

但是,当我使用'console.log'来检查数据后的状态。
它给了我如下。

   Proxy {0: "{"content":"asdf","id":"123","title":"yoman"}", 
1: "{"content":"asdf","id":"123","title":"yoman"}",
 Symbol(mobx administration): ObservableArrayAdministration}

如何将json数据很好地推入mobx状态?

1 个答案:

答案 0 :(得分:3)

const projectsTotal = JSON.stringify(done.data());

会将返回的对象转换为字符串

您可以更改它以仅分配数据。

 @observable projectState = {
    projects: []
  };

  projectGet = () => {
    firebase
      .firestore()
      .collection("projects")
      .doc("DkBFcdAOAWWl8Az")
      .get()
      .then(done => {
        this.projectState.projects.push(done.data());
      });
  };

此外,从字符串化的值中,我看到Firebase返回了一个对象文字,您可能是将其转换为数组并分别推送每个项目的方式。

您可以使用Object.values来获取值的数组。

@observable projectState = {
    projects: []
  };

  projectGet = () => {
    firebase
      .firestore()
      .collection("projects")
      .doc("DkBFcdAOAWWl8Az")
      .get()
      .then(done => {
        Object.values(done.data())
              .forEach((value) => {this.projectState.projects.push(value)});
      });
  };