【发布时间】:2017-04-04 14:31:08
【问题描述】:
我正在开发一个 React 应用程序,该应用程序从 Google 的 Firebase 上的数据库中获取数据。
数据库是这样组织的:
users {
user 1 {
name
surname
...
}
user 2 {
name
surname
...
}
}
我如何在 React 中检索数据:
我从 url 获取位置和工具来过滤搜索结果(现在只使用位置,但想同时使用两者),并且我成功地设法在控制台中打印了对象。
componentWillMount(){
const searchResults = FBAppDB.ref('users');
let location = this.props.location;
let instrument = this.props.instrument;
let profiles = [];
searchResults.orderByChild('location').equalTo(location).on('value', (snap) => {
let users = snap.val();
Object.keys(users).map((key) => {
let user = users[key];
console.log(user);
profiles.push(user);
});
});
// this.setState({users: profiles[0]});
}
对象的控制台输出:
Object {name: "Whatever", surname: "Surrname", ... }
我似乎失败的是将这些对象(可能不止一个)保存在状态中,这样当用户更改页面上的其他过滤器时,我可以更新视图。
我试图 setState 实际用户,但状态结果为空,知道吗?
除了写入之外,从状态中获取数据的最佳方式是什么?如何循环遍历状态中的对象?
谢谢
编辑
这是我的渲染函数的样子:
render(){
return(
<Row>
{
Object.keys(this.state.users).map(function (key) {
var user = this.state.users[key];
return <SearchResult user={user} />
})
}
</Row>
);
}
我尝试直接打印 this.state.users,但它不起作用。因此,我试图提出一个(非工作)解决方案。对于这里的任何菜鸟错误,我深表歉意。
【问题讨论】:
-
是否
SearchResult期望user道具的格式为{ name: "Whatever", surname: "Surrname", ...}? -
是的,它需要整个对象,然后我像 this.props.user.name 这样调用每个属性
标签: javascript reactjs firebase firebase-realtime-database state