【发布时间】:2015-08-31 14:46:42
【问题描述】:
我正在使用 React Native 重新构建我之前在 Swift 中制作的应用程序。在这个阶段,这是一张带有别针的简单地图。它使用虚拟数据呈现,我可以从 Parse 成功查询数据,但我不知道如何正确映射它,因为我无法使用语法检查查询是否已完成。我相信,关键在于理解 React 状态和 Javascript/JSX 语法——感谢指导。
相关代码:
var testApp = React.createClass({
mixins: [ParseReact.Mixin],
getInitialState() {
return {
mapRegion: {
latitude: 22.27,
longitude: 114.17,
latitudeDelta: 0.2,
longitudeDelta: 0.2,
},
annotations: null,
isFirstLoad: true,
};
},
componentDidMount: function() {
this.setState({isLoading: true});
},
render() {
// console.log(this.data.sites); // this works without the below
return (
<View>
<MapView
style={styles.map}
region={this.state.mapRegion || undefined}
annotations={this.state.data.sites.map(function(site) { // error
var pinObj = {};
pinObj.latitude = site.Lat;
pinObj.longitude = site.Long;
pinObj.title = site.Name;
pinObj.subtitle = site.Address;
return pinObj;
}) || undefined}
/>
</View>
);
},
observe: function(props, state) {
var siteQuery = (new Parse.Query('Site')).ascending('Name');
return state.isLoading ? {sites: siteQuery} : null;
},
});
产生错误:'无法读取未定义的属性'sites''。这显然是因为我试图在查询返回之前迭代站点数据。如何修改我的语法来处理这个问题?在单独的函数中定义地图?
【问题讨论】:
-
我不知道反应,但有两个观察结果:(1)我看不到查询在哪里运行(例如通过调用 find()),以及 (2)渲染想要立即运行,在有任何结果之前渲染状态?如果是这样,那么一些初始化步骤应该将站点设置为一个空数组。
-
感谢@danh,查询正在运行,在 componentDidMount 中(例如类似于 iOS viewDidLoad)。至少 - 它在我不尝试使用数据的版本中运行。我可能会先尝试将虚拟数据设置为占位符。
标签: javascript parse-platform reactjs react-native