React-native-meteor 包订阅句柄未准备好
React-native-meteor package subscription handle not ready
我正在尝试使用 react-native-meteor 包结合 react-native 和 meteor。 Meteor 成功发布了一个 'dos' 集合,我已经能够在网络客户端上订阅它。但是,在遵循 react-native-meteor 包的文档(使用 createContainer)之后,我无法订阅;句柄是 'never ready'。当使用 Meteor 的 autopublish 包时,数据会加载。
版本
Meteor 1.3.4.1
react-native: 0.28.0
react-native-meteor: 1.0.0-rc14
index.ios.js
// @flow
'use strict'
import React, { Component } from 'react'
import {
AppRegistry,
StyleSheet,
View,
NavigatorIOS,
StatusBar,
Text,
} from 'react-native'
import Meteor, {
createContainer,
MeteorListView,
} from 'react-native-meteor'
Meteor.connect('ws://localhost:3000/websocket')
import GeoLocation from './app/GeoLocation'
import ConnectionInfoSubscription from './app/NetInfo'
import GridLayout from './app/GridLayout'
class DoCHANGE_0 extends Component {
renderRow(Do){
return(
<Text>{Do.joke}</Text>
)
}
render() {
const { doList, } = this.props
return (
<View style={styles.container}>
<StatusBar
barStyle="light-content"
/>
<NavigatorIOS
style = {styles.container}
barTintColor='#556270'
titleTextColor='#fff'
tintColor='#fff'
initialRoute={{
title: 'DoCHANGE',
component: GridLayout
}}/>
{!doList && <Text>Not ready with subscription</Text>}
<MeteorListView
collection="dos"
renderRow={this.renderRow}
enableEmptySections={true}
/>
</View>
)
}
}
const styles = StyleSheet.create({
container: {
flex:1,
}
});
export default createContainer(params=>{
const handle = Meteor.subscribe('dos')
return {
doList: handle.ready(),
};
}, DoCHANGE_0)
AppRegistry.registerComponent('DoCHANGE_0', () => DoCHANGE_0);
我发现了类似的例子,但他们通常不使用 react-native-meteor 包,而是使用 ddpclient 包。我在这里遗漏了一些明显的东西吗?非常感谢任何见解!
编辑:
(流星)/server/publish.js
Meteor.publish("dos", function() {
//console.log(Dos.find().fetch())
return Dos.find();
})
(流星)/both/collections.js
Dos = new Mongo.Collection('dos');
使用 Meteor 自动发布时的屏幕截图。 doList 句柄还没有准备好。但是 MeteorList 得到了正确的填充。
你的问题中只包含了客户端代码,但听起来你缺少对服务器的 Meteor.publish() 调用,如果它使用自动发布但不是没有它的话!
我升级到更新版本的 react-native、meteor 和 react-native-meteor,但这并没有解决问题。但是,当将 renderRow 函数重命名为 renderItem 时,它开始工作了。
renderRow={this.renderRow}
renderRow={this.renderItem}
我正在尝试使用 react-native-meteor 包结合 react-native 和 meteor。 Meteor 成功发布了一个 'dos' 集合,我已经能够在网络客户端上订阅它。但是,在遵循 react-native-meteor 包的文档(使用 createContainer)之后,我无法订阅;句柄是 'never ready'。当使用 Meteor 的 autopublish 包时,数据会加载。
版本
Meteor 1.3.4.1
react-native: 0.28.0
react-native-meteor: 1.0.0-rc14
index.ios.js
// @flow
'use strict'
import React, { Component } from 'react'
import {
AppRegistry,
StyleSheet,
View,
NavigatorIOS,
StatusBar,
Text,
} from 'react-native'
import Meteor, {
createContainer,
MeteorListView,
} from 'react-native-meteor'
Meteor.connect('ws://localhost:3000/websocket')
import GeoLocation from './app/GeoLocation'
import ConnectionInfoSubscription from './app/NetInfo'
import GridLayout from './app/GridLayout'
class DoCHANGE_0 extends Component {
renderRow(Do){
return(
<Text>{Do.joke}</Text>
)
}
render() {
const { doList, } = this.props
return (
<View style={styles.container}>
<StatusBar
barStyle="light-content"
/>
<NavigatorIOS
style = {styles.container}
barTintColor='#556270'
titleTextColor='#fff'
tintColor='#fff'
initialRoute={{
title: 'DoCHANGE',
component: GridLayout
}}/>
{!doList && <Text>Not ready with subscription</Text>}
<MeteorListView
collection="dos"
renderRow={this.renderRow}
enableEmptySections={true}
/>
</View>
)
}
}
const styles = StyleSheet.create({
container: {
flex:1,
}
});
export default createContainer(params=>{
const handle = Meteor.subscribe('dos')
return {
doList: handle.ready(),
};
}, DoCHANGE_0)
AppRegistry.registerComponent('DoCHANGE_0', () => DoCHANGE_0);
我发现了类似的例子,但他们通常不使用 react-native-meteor 包,而是使用 ddpclient 包。我在这里遗漏了一些明显的东西吗?非常感谢任何见解!
编辑:
(流星)/server/publish.js
Meteor.publish("dos", function() {
//console.log(Dos.find().fetch())
return Dos.find();
})
(流星)/both/collections.js
Dos = new Mongo.Collection('dos');
使用 Meteor 自动发布时的屏幕截图。 doList 句柄还没有准备好。但是 MeteorList 得到了正确的填充。
你的问题中只包含了客户端代码,但听起来你缺少对服务器的 Meteor.publish() 调用,如果它使用自动发布但不是没有它的话!
我升级到更新版本的 react-native、meteor 和 react-native-meteor,但这并没有解决问题。但是,当将 renderRow 函数重命名为 renderItem 时,它开始工作了。
renderRow={this.renderRow}
renderRow={this.renderItem}