使用 firebase 将圆形结构转换为 JSON 反应导航
Converting circular structure to JSON react-navigation with firebase
大家好.. 我正在尝试在我的项目中使用 react-navigation 和 firebase。
我正在使用这个很棒的样板:-
https://github.com/jhen0409/react-native-boilerplate
在我的 navigator.js
import { StackNavigator } from 'react-navigation';
import Home from './containers/Home';
import MainScreen from './containers/MainScreen';
import HelpScreen from './containers/HelpScreen';
const AppNavigator = new StackNavigator(
{
Home: { screen: Home },
MainScreen: { screen: MainScreen },
HelpScreen: { screen: HelpScreen }
},
{
headerMode: 'screen'
},
);
export default AppNavigator;
然后在我的着陆屏幕中 Home.js
@firebaseConnect()
@connect(
state => ({
nav: state.nav.routes
}),
dispatch => bindActionCreators(userActions, dispatch),
)
export default class Home extends Component {
componentDidMount() {
this.props.firebase.auth().onAuthStateChanged( user => {
if(user) {
//check route stack in redux store
if(this.props.nav[this.props.nav.length-1].routeName !== 'MainScreen') {
this.props.navigation.navigate('MainScreen');
}
this.props.firebase.updateProfile({ lastLogin: new Date() });
user.getIdToken().then( t => this.props.userToken(t) );
} else {
this.props.firebase.auth().signInAnonymously()
.then((user) => {
console.log('user successfully sign in anonymously', user);
// Insert user record to firebase
this.props.firebase.updateProfile(
{
name: 'Anonymous'
}
)
})
.catch(
(error) => {
console.log('error ', error)
})
}
})
}
render() {
return (
<View />
);
}
}
在我的 MainScreen.js
里面
@firebaseConnect(['/helpDetails'])
@connect(
(state, props) => {
return({
})
}
)
export default class MainScreen extends Component {
logout = () => {
this.props.navigation.goBack();
this.props.firebase.logout();
console.log('logout!');
}
render() {
return (
<View style={{ flex: 1 }}>
<TouchableOpacity onPress={() => this.logout()}>
<Text>LOG OUT</Text>
</TouchableOpacity/>
</View>
)
}
}
当用户打开应用程序时一切正常..但是当我点击注销时它开始显示这个红屏..如果我在 Mainscreen 中从
更改 firebaseConnect
@firebaseConnect(['/helpDetails'])
到
@firebaseConnect([])
那么一切正常..
谁能帮我看看我做错了什么?谢谢!
我觉得这不是你的问题,而是图书馆的问题。我有同样的问题。感谢上帝,这只会在开发人员模式下发生(在发布时一切正常)。
当我在没有 devtools 的情况下尝试时,它起作用了。在我看来,react-redux-firebase 在注销时做了一些奇怪的事情并创建(可能只是一秒钟)一个循环 JSON-structure。在 JavaScript 本身这不是一个大问题,但是当你想对它进行字符串化时(这样做是为了在你的开发者工具中显示它),那么循环结构就不能转换为字符串。希望开发者尽快解决这个问题。
大家好.. 我正在尝试在我的项目中使用 react-navigation 和 firebase。 我正在使用这个很棒的样板:-
https://github.com/jhen0409/react-native-boilerplate
在我的 navigator.js
import { StackNavigator } from 'react-navigation';
import Home from './containers/Home';
import MainScreen from './containers/MainScreen';
import HelpScreen from './containers/HelpScreen';
const AppNavigator = new StackNavigator(
{
Home: { screen: Home },
MainScreen: { screen: MainScreen },
HelpScreen: { screen: HelpScreen }
},
{
headerMode: 'screen'
},
);
export default AppNavigator;
然后在我的着陆屏幕中 Home.js
@firebaseConnect()
@connect(
state => ({
nav: state.nav.routes
}),
dispatch => bindActionCreators(userActions, dispatch),
)
export default class Home extends Component {
componentDidMount() {
this.props.firebase.auth().onAuthStateChanged( user => {
if(user) {
//check route stack in redux store
if(this.props.nav[this.props.nav.length-1].routeName !== 'MainScreen') {
this.props.navigation.navigate('MainScreen');
}
this.props.firebase.updateProfile({ lastLogin: new Date() });
user.getIdToken().then( t => this.props.userToken(t) );
} else {
this.props.firebase.auth().signInAnonymously()
.then((user) => {
console.log('user successfully sign in anonymously', user);
// Insert user record to firebase
this.props.firebase.updateProfile(
{
name: 'Anonymous'
}
)
})
.catch(
(error) => {
console.log('error ', error)
})
}
})
}
render() {
return (
<View />
);
}
}
在我的 MainScreen.js
里面@firebaseConnect(['/helpDetails'])
@connect(
(state, props) => {
return({
})
}
)
export default class MainScreen extends Component {
logout = () => {
this.props.navigation.goBack();
this.props.firebase.logout();
console.log('logout!');
}
render() {
return (
<View style={{ flex: 1 }}>
<TouchableOpacity onPress={() => this.logout()}>
<Text>LOG OUT</Text>
</TouchableOpacity/>
</View>
)
}
}
当用户打开应用程序时一切正常..但是当我点击注销时它开始显示这个红屏..如果我在 Mainscreen 中从
更改 firebaseConnect@firebaseConnect(['/helpDetails'])
到
@firebaseConnect([])
那么一切正常..
谁能帮我看看我做错了什么?谢谢!
我觉得这不是你的问题,而是图书馆的问题。我有同样的问题。感谢上帝,这只会在开发人员模式下发生(在发布时一切正常)。 当我在没有 devtools 的情况下尝试时,它起作用了。在我看来,react-redux-firebase 在注销时做了一些奇怪的事情并创建(可能只是一秒钟)一个循环 JSON-structure。在 JavaScript 本身这不是一个大问题,但是当你想对它进行字符串化时(这样做是为了在你的开发者工具中显示它),那么循环结构就不能转换为字符串。希望开发者尽快解决这个问题。