Firebase React绑定

时间:2017-01-19 22:33:20

标签: javascript reactjs firebase firebase-realtime-database

我对React有点新,并使用重新库来与Firebase一起使用。

我目前正在尝试呈现一个表,但由于我的数据在firebase中的结构,我需要从两个位置获取一个键列表 - 第一个是用户键列表团队成员,第二个是完整的用户信息。

团队节点的结构如下:/teams/team_id/userkeys,用户信息的存储方式如下:/Users/userkey/{email, name, etc.}

我的表由两个反应组件组成:表组件和行组件。

我的表组件传递了道具teamid,并且我使用re-base的bindToState功能来获取componentWillMount()中的关联用户密钥。然后,我再次使用bindToState来获取完整的用户节点,如下所示:

componentWillMount() {
  this.ref = base.bindToState(`/teams/${this.props.data}/members`, {
  context: this,
  state: 'members',
  asArray: true,
  then() {
   this.secondref = base.bindToState('/Users', {
   context: this,
   state: 'users',
   asArray: true,
   then() {
     let membersKeys = this.state.members.map(function(item) {
       return item.key;
     });
     let usersKeys = this.state.members.map(function(item) {
       return item.key;
     });
     let onlyCorrectMembersKeys = intersection(membersKeys, usersKeys);
     this.setState({
       loading: false
     });
   }
 });
 }
});
}

如您所见,我创建了membersKeysusersKeys,然后使用underscore.js的交集函数来获取我的用户节点中的所有成员密钥(注意:我这样做)这是因为在某些情况下,用户将成为团队成员,但不在/Users下。

我挣扎的部分是添加额外的rebase调用以创建完整成员数组(即来自/Users的用户数据,用于{{1}中的键}。

编辑:我已尝试

onlyCorrectMembersKeys

但我收到错误 let allKeys = []; onlyCorrectMembersKeys.forEach(function(element) { base.fetch(`/Users/${element}`, { asArray: true, then(data) { allKeys.prototype.concat(data); } }); });

我假设那是因为只有KeyCensMembersKeys还没有完全计算出来,但我正在努力寻找解决这个问题的最佳方法..

1 个答案:

答案 0 :(得分:1)

对于任何处理这个问题的人,我似乎找到了(某种程度上)解决方案:

     onlyCorrectMembersKeys.map(function(item) {

         base.fetch(`/Users/${item}`, {
           context: this,
           asObject: true,
           then(data) {
             if (data) {
               allKeyss.push({item,data});
               this.setState({allKeys: allKeyss});
             }
             this.setState({loading: false});
           },
          onFailure(err) {
            console.log(err);
            this.setState({loading: false});
          }
         })
       }, this);
     }

这样可以正常工作,但是当更新usersmembers状态时,它不会更新allkeys状态。我确信这只是因为我的反应知识水平,所以当我想出来时,我会发布解决方案。

编辑:使用listenTo而不是bindToState是正确的方法,因为bindToState的回调只被触发一次。