如何将 Reactfire 与 React Native 一起使用
How to use reactfire with react native
我正在尝试将 'reactfire' mixin 与我的应用程序的 React Native 结合使用。
我安装了 npm 模块。
$ npm install reactfire --save
我将该模块包含在我的 'index.ios.js' 文件中
var ReactFireMixin = require('./node_modules/reactfire');
我将 mixin 添加到 class
mixins: [ReactFireMixin],
我说
getInitialState: function() {
return {
items: [],
}
},
componentWillMount: function() {
var ref = new Firebase('https://<MY APP NAME>.firebaseio.com/tasks');
this.bindAsArray(ref, 'items');
console.log(ref);
console.log(this.state.items);
}
然后我得到
我可以很好地使用 'firebase' npm 模块,但不能使用 'reactfire' 模块,我想在我的应用程序中使用 mixin 而不是其他替代方案。
我也很好奇这个特定的 mixin 如何处理离线使用。
PS:firebase documentation 中的缺陷,因为只做 'mixins: [ReactFireMixin],' 不会做任何事情,并且在为 React Native 开发时没有 html 文件.
是的,我是一个 React 新手,所以这可能完全是在浪费你的时间。
这是完整的代码 - github repo
我刚刚测试过,在 React Native 应用程序中使用 ReactFire 时没有发现任何问题(至少 Android)。
我的整个index.android.js
:
'use strict';
var React = require('react-native');
var Firebase = require('firebase');
var ReactFireMixin = require('reactfire');
var {
AppRegistry,
StyleSheet,
Text,
View,
TextInput,
TouchableHighlight,
} = React;
var CoolProject = React.createClass({
mixins: [ReactFireMixin],
getInitialState: function() {
return {
items: []
};
},
componentWillMount: function() {
this.ref = new Firebase('https://nanochat.firebaseio.com/chat');
this.bindAsArray(this.ref, 'items');
},
_onPressButton: function() {
this.ref.push({ name: 'puf', message: this.state.text });
},
render: function() {
var createItem = function(item, index) {
return <Text>{item.name}: {item.message}</Text>
};
return (
<View style={styles.container}>
<Text style={styles.welcome}>
Welcome to React Native!
</Text>
{this.state.items.map(createItem)}
<View style={styles.horizontal}>
<TextInput onChangeText={(text) =>
this.setState({ text: text})} value={this.state.text} />
<TouchableHighlight onPress={this._onPressButton}>
<Text>Send</Text>
</TouchableHighlight>
</View>
</View>
);
}
});
var styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
},
instructions: {
textAlign: 'center',
color: '#333333',
marginBottom: 5,
},
});
AppRegistry.registerComponent('CoolProject', () => CoolProject);
请注意,在许多情况下,没有必要使用 ReactFire。例如,这是我使用的代码而不是 this.bindAsArray(ref, 'items')
:
因此,如果 ReactFire 给您带来了问题,请考虑在没有 ReactFire 的情况下也能正常工作。
this.ref.on('value', function(snapshot) {
var items = [];
snapshot.forEach(function(child) {
items.push(child.val());
});
this.setState({ 'items': items });
}.bind(this));
我正在尝试将 'reactfire' mixin 与我的应用程序的 React Native 结合使用。
我安装了 npm 模块。
$ npm install reactfire --save
我将该模块包含在我的 'index.ios.js' 文件中
var ReactFireMixin = require('./node_modules/reactfire');
我将 mixin 添加到 class
mixins: [ReactFireMixin],
我说
getInitialState: function() {
return {
items: [],
}
},
componentWillMount: function() {
var ref = new Firebase('https://<MY APP NAME>.firebaseio.com/tasks');
this.bindAsArray(ref, 'items');
console.log(ref);
console.log(this.state.items);
}
然后我得到
我可以很好地使用 'firebase' npm 模块,但不能使用 'reactfire' 模块,我想在我的应用程序中使用 mixin 而不是其他替代方案。
我也很好奇这个特定的 mixin 如何处理离线使用。
PS:firebase documentation 中的缺陷,因为只做 'mixins: [ReactFireMixin],' 不会做任何事情,并且在为 React Native 开发时没有 html 文件.
是的,我是一个 React 新手,所以这可能完全是在浪费你的时间。
这是完整的代码 - github repo
我刚刚测试过,在 React Native 应用程序中使用 ReactFire 时没有发现任何问题(至少 Android)。
我的整个index.android.js
:
'use strict';
var React = require('react-native');
var Firebase = require('firebase');
var ReactFireMixin = require('reactfire');
var {
AppRegistry,
StyleSheet,
Text,
View,
TextInput,
TouchableHighlight,
} = React;
var CoolProject = React.createClass({
mixins: [ReactFireMixin],
getInitialState: function() {
return {
items: []
};
},
componentWillMount: function() {
this.ref = new Firebase('https://nanochat.firebaseio.com/chat');
this.bindAsArray(this.ref, 'items');
},
_onPressButton: function() {
this.ref.push({ name: 'puf', message: this.state.text });
},
render: function() {
var createItem = function(item, index) {
return <Text>{item.name}: {item.message}</Text>
};
return (
<View style={styles.container}>
<Text style={styles.welcome}>
Welcome to React Native!
</Text>
{this.state.items.map(createItem)}
<View style={styles.horizontal}>
<TextInput onChangeText={(text) =>
this.setState({ text: text})} value={this.state.text} />
<TouchableHighlight onPress={this._onPressButton}>
<Text>Send</Text>
</TouchableHighlight>
</View>
</View>
);
}
});
var styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
},
instructions: {
textAlign: 'center',
color: '#333333',
marginBottom: 5,
},
});
AppRegistry.registerComponent('CoolProject', () => CoolProject);
请注意,在许多情况下,没有必要使用 ReactFire。例如,这是我使用的代码而不是 this.bindAsArray(ref, 'items')
:
因此,如果 ReactFire 给您带来了问题,请考虑在没有 ReactFire 的情况下也能正常工作。
this.ref.on('value', function(snapshot) {
var items = [];
snapshot.forEach(function(child) {
items.push(child.val());
});
this.setState({ 'items': items });
}.bind(this));