这是我的Firebase结构。
我想像这样把它全部拿回来。
{
"users": {
"EFo7BemCuWVFyGYwk0CiTHR5fDB2": {
"profile": {
"-LMUD--2APhiSLkEtVbM": {
"profileName": "bob",
"profilePic": "https://scontent-iad3-1.xx.fbcdn.net/v/t1.0-1/c27.0.160.160/p160x160/205110_1018814483408_6876_n.jpg?_nc_cat=0&oh=2e40387a728c2f8c8d04b3299601be7e&oe=5C18FC6D",
"score": 73,
"teamName": "lzs"
}
},
"team": {
"-LPpWX5o8kmfCKUZBoYy": {
"competitorKey": "-LNb6AEdyBSmeooeDhT0"
},
"-LPpWX_SMWHWsKauutVC": {
"competitorKey": "-LNb42VDA4ZjW2EeVLLd"
}
}
},
"FIXBObMxXoOzFE7hsb4wHl8esfe2": {
"profile": {
"-LPqBizyqR-jEAsawYO7": {
"profileName": "steve",
"profilePic": "http://www.cricearena.com/images/rough_riders_new_medium_logo-u2182.png",
"score": 43,
"teamName": "twitterRangers4"
}
},
"team": {
"-LPqX9ncuK09WvnT3SIk": {
"competitorKey": "-LNb6AEdyBSmeooeDhT0"
}
}
}
}
}
我得到的只是用户的密码。
我的redux动作是
export function loadLeague() {
return dispatch => {
leagueFireDB.path = `users/`;
leagueFireDB.subscribe(dispatch);
};
}
我的高级fb db函数。
subscribe(emit) {
let ref = firebaseDb.ref(this._path);
let initialized = false;
let list = [];
ref.once('value', () => {
initialized = true;
console.log("ONCE::",this._actions)
emit(this._actions.onLoad(list));
});
ref.on('child_added', snapshot => {
if (initialized) {
emit(this._actions.onAdd(this.unwrapSnapshot(snapshot)));
}
else {
list.push(this.unwrapSnapshot(snapshot));
}
});
ref.on('child_changed', snapshot => {
emit(this._actions.onChange(this.unwrapSnapshot(snapshot)));
});
ref.on('child_removed', snapshot => {
console.log("REMOVE2::",snapshot)
emit(this._actions.onRemove(this.unwrapSnapshot(snapshot)));
});
this._unsubscribe = () => ref.off();
}
因此,很明显,它命中了数据库中的“用户”节点,并在那里获取了这些键。它不会遍历并返回所有属于ref的孩子(或者我猜是大孩子,等等)。我想在数据库中获取Users引用的所有子级,但是我一直在寻找,没有找到任何能做到这一点的东西。我反应redux火力基地。而已。没有API /中间件。
答案 0 :(得分:0)
因此,这给了我完整的目标,包括我一直在寻找的所有子代和大子代。
subscribeChild(emit) {
let ref = firebaseDb.ref(this._path);
ref.once('value', snapshot => {
emit(this._actions.onLoad(this.unwrapSnapshot(snapshot)));
});
}
这是我的包裹。
unwrapSnapshot(snapshot) {
let attrs = snapshot.val();
attrs.key = snapshot.key;
return new this._modelClass(attrs);
}
我的加载操作请求正在调用ref.once高级别的Firebase数据库调用,但我没有在其中展开快照。因此,我仅针对此加载请求创建了另一个名为subscribeChild的订阅发射器,并将unwrapSnapShot放入返回的发射器中。确实,整个对象都包含所有子引用和键值数据。现在,我必须弄清楚如何处理数据对象。 :)
我只是通过这个Firebase RTDB进行操作,所以如果有人有任何评论,或者如果我确实做错了,请发表评论,我将相应地更新或接受更好的答案。