【问题标题】:Initializing a map in firestore在 Firestore 中初始化地图
【发布时间】:2019-07-22 00:35:36
【问题描述】:

我正在尝试使用带有 firestore 数据库的 react native 构建应用程序。我对 react native 框架(以及使用 firestore)相当陌生,所以我可能试图以错误的方式解决这个问题。

我有一个运行良好且已填充的数据库。对于这个应用程序的每个用户,我想在他们的条目中添加一个map。我想用这个map 来存储一些关于用户的数据,他们可以稍后填写。

这里有一些代码:

componentDidMount() {
  this.readProfile(this.props.uid);
}

readProfile = (uid) => {
  this.props.getProfile(uid).then((profile) => 
  {
    if(!profile.userMap)
    {
      profile.userMap = generateUserMap();
    }
...
}

export const generateUserMap = function () {
  var map = new Map();
  SomeEnum.forEach((key, value) => {
    map.set(key, false);
  });
  AnotherEnum.forEach((key, value) => {
    map.set(key, false);
  });
  OneMoreEnum.forEach((key, value) => {
    map.set(key, false);
  });
  return map;
};

...

<Input
 value={this.state.profile.userMap[SomeEnum.Foo]}
 onChangeText={(foo) => this.updateUserMap({ foo })}
/>

我希望这段代码在我加载页面时读取用户的个人资料。那部分似乎工作正常。我的下一个问题是正确初始化map 对象。代码似乎没有正确初始化地图,但我不知道为什么。这就是我这么说的原因:

TypeError: 无法读取未定义的属性“Foo”

堆栈跟踪指向我的组件的Connect() 方法。

任何帮助将不胜感激。

编辑:为疏忽道歉,这里是 updateUserMap 函数:

updateUserMap = (property) => {
  const profile = Object.assign({}, this.state.profile, property);
  this.setState({ profile });
}

【问题讨论】:

  • updateUserMap 函数在哪里??
  • 如@hongdevelop所说,能否给我们updateUserMap函数的实现?
  • @hongdevelop 当然,很抱歉忽略了这一点!更新问题。

标签: react-native google-cloud-firestore


【解决方案1】:

所以,任何看过这个问题的人都可能知道,我做的一些事情非常错误。

在我的渲染方法中,我特别提到了那个输入块的错误 - this.state.profile.userMap 在那个时候是未定义的。如果我在渲染方法中但在访问 userMap 之前进行检查,我可以保证它不会是未定义的。由于生命周期方法在本机反应中的工作方式,不会在我的渲染方法之前调用 ComponentDidMount。

我的枚举代码也不起作用。我把它改成了一个简单的 for 循环,它就像一个魅力。

这是我更新的代码:

  render() {
    if(!this.state.profile.userMap)
    {
      this.state.profile.userMap = generateUserMap();
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-16
    • 2019-06-05
    • 2012-06-26
    • 1970-01-01
    • 2019-09-10
    • 2012-11-07
    • 2012-06-12
    • 1970-01-01
    相关资源
    最近更新 更多