我想了解f8app:https://github.com/fbsamples/f8app
其中,它有一个专门用于导航的部分:F8Navigator.js
看起来像:
var F8Navigator = React.createClass({
_handlers: ([]: Array<() => boolean>),
componentDidMount: function() {
BackAndroid.addEventListener('hardwareBackPress', this.handleBackButton);
},
componentWillUnmount: function() {
BackAndroid.removeEventListener('hardwareBackPress', this.handleBackButton);
},
getChildContext() {
return {
addBackButtonListener: this.addBackButtonListener,
removeBackButtonListener: this.removeBackButtonListener,
};
},
addBackButtonListener: function(listener) {
this._handlers.push(listener);
},
removeBackButtonListener: function(listener) {
this._handlers = this._handlers.filter((handler) => handler !== listener);
},
handleBackButton: function() {
for (let i = this._handlers.length - 1; i >= 0; i--) {
if (this._handlers[i]()) {
return true;
}
}
const {navigator} = this.refs;
if (navigator && navigator.getCurrentRoutes().length > 1) {
navigator.pop();
return true;
}
if (this.props.tab !== 'schedule') {
this.props.dispatch(switchTab('schedule'));
return true;
}
return false;
},
render: function() {
return (
<Navigator
ref="navigator"
style={styles.container}
configureScene={(route) => {
if (Platform.OS === 'android') {
return Navigator.SceneConfigs.FloatFromBottomAndroid;
}
// TODO: Proper scene support
if (route.shareSettings || route.friend) {
return Navigator.SceneConfigs.FloatFromRight;
} else {
return Navigator.SceneConfigs.FloatFromBottom;
}
}}
initialRoute={{}}
renderScene={this.renderScene}
/>
);
},
renderScene: function(route, navigator) {
if (route.allSessions) {
return (
<SessionsCarousel
{...route}
navigator={navigator}
/>
);
}
if (route.session) {
return (
<SessionsCarousel
session={route.session}
navigator={navigator}
/>
);
}
if (route.filter) {
return (
<FilterScreen navigator={navigator} />
);
}
if (route.friend) {
return (
<FriendsScheduleView
friend={route.friend}
navigator={navigator}
/>
);
}
if (route.login) {
return (
<LoginModal
navigator={navigator}
onLogin={route.callback}
/>
);
}
if (route.share) {
return (
<SharingSettingsModal navigator={navigator} />
);
}
if (route.shareSettings) {
return <SharingSettingsScreen navigator={navigator} />;
}
if (route.rate) {
return <RatingScreen navigator={navigator} surveys={route.surveys} />;
}
if (route.notices) {
return <ThirdPartyNotices navigator={navigator} />;
}
return <F8TabsView navigator={navigator} />;
},
});
F8Navigator.childContextTypes = {
addBackButtonListener: React.PropTypes.func,
removeBackButtonListener: React.PropTypes.func,
};
var styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: 'black',
},
});
function select(store) {
return {
tab: store.navigation.tab,
isLoggedIn: store.user.isLoggedIn || store.user.hasSkippedLogin,
};
}
module.exports = connect(select)(F8Navigator);
我想做的是,只需在我拥有的组件中按一个按钮:
<F8Button
style={styles.button}
onPress={}
caption="Create Account"
/>
并在按下时导航到另一个组件视图。我该怎么做?谢谢。
答案 0 :(得分:0)
如果你看一下Navigator documentation,你可以看到onPress
道具中你必须放navigator.push(routes[1]);
或w / e定义你的路线。