gpt4 book ai didi

menu - 带有路线或导航的 react-native-side-menu 的完整工作示例

转载 作者:行者123 更新时间:2023-12-04 17:17:05 25 4
gpt4 key购买 nike

关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。












我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便可以用事实和引用来回答它。


5年前关闭。







Improve this question




我发现很少有帖子给出了一些关于如何将导航\路由与 react-native-side-menu 集成的“提示”,遗憾的是没有找到任何显示此类功能的完整工作示例的帖子。

我也不确定导航\路线最简单的实现是什么,以及这两个选项之间有什么区别(当然这不是专门针对侧边菜单,但在我的情况下应该结合在一起)。

任何人都可以指出这样的例子吗?

最佳答案

所以最终我能够集成标准的导航器,如 Facebook 的官方示例代码所示:

https://github.com/facebook/react-native/tree/master/Examples/UIExplorer/Navigator

使用 react-native-side-menu 组件,整个代码如下所示:

'use strict';

var React = require('react');
var ReactNative = require('react-native');
var SideMenu = require('react-native-side-menu');

var {
Component,
Navigator,
AppRegistry,
View,
Text,
Image,
StyleSheet,
ScrollView,
TouchableOpacity
} = ReactNative;

class FirstPage extends Component {
render() {
return (
<View style={styles.page}><Text style={styles.pageContent}>First Page</Text></View>
);
}
}

class FirstPageMenu extends Component {

constructor(props) {
super(props);
this.state = {};
}

toggle() {
this.setState({
isOpen: !this.state.isOpen,
});
}

updateMenuState(isOpen) {
this.setState({ isOpen, });
}

onMenuItemSelected = (item) => {
this.setState({
isOpen: false,
selectedItem: item,
});
this.props.navigator.replace({ id: item });
}

render() {

const menu = <Menu onItemSelected={this.onMenuItemSelected} navigator={this.props.navigator}/>;

return (
<SideMenu
menu={menu}
isOpen={this.state.isOpen}
onChange={(isOpen) => this.updateMenuState(isOpen)}>
<MenuButton onPress={() => this.toggle()}/>
<FirstPage/>
</SideMenu>
);
}
};

class SecondPage extends Component {
...
}

class SecondPageMenu extends Component {
...
}

class ThirdPage extends Component {
...
}

class ThirdPageMenu extends Component {
...
}

class MenuNavigator extends Component {

constructor(props) {
super(props);
this._setNavigatorRef = this._setNavigatorRef.bind(this);
}

renderScene(route, nav) {
switch (route.id) {
case 'first':
return <FirstPageMenu navigator={nav} />;
case 'second':
return <SecondPageMenu navigator={nav} />;
case 'third':
return <ThirdPageMenu navigator={nav} />;
default:
return <FirstPageMenu navigator={nav} />;
}
}

render() {
return (
<Navigator
ref={this._setNavigatorRef}
initialRoute={{id: 'first'}}
renderScene={this.renderScene}
configureScene={(route) => {
if (route.sceneConfig) {
return route.sceneConfig;
}
return Navigator.SceneConfigs.FloatFromBottom;
}}
/>
);
}

componentWillUnmount() {
this._listeners && this._listeners.forEach(listener => listener.remove());
}

_setNavigatorRef(navigator) {
if (navigator !== this._navigator) {
this._navigator = navigator;

if (navigator) {
var callback = (event) => {
console.log(
`NavigatorMenu: event ${event.type}`,
{
route: JSON.stringify(event.data.route),
target: event.target,
type: event.type,
}
);
};
// Observe focus change events from the owner.
this._listeners = [
navigator.navigationContext.addListener('willfocus', callback),
navigator.navigationContext.addListener('didfocus', callback),
];
}
}
}
};

class MenuButton extends Component {

handlePress(e) {
if (this.props.onPress) {
this.props.onPress(e);
}
}

render() {
return (
<View style={styles.menuButton} >
<TouchableOpacity
onPress={this.handlePress.bind(this)}
style={this.props.style}>
<Text>{this.props.children}</Text>
<Image
source={{ uri: 'http://i.imgur.com/vKRaKDX.png', width: 40, height: 40, }} />
</TouchableOpacity>
</View>
);
}
}

class Menu extends Component {

static propTypes = {
onItemSelected: React.PropTypes.func.isRequired,
};

constructor(props) {
super(props);
}

render() {

return (

<ScrollView scrollsToTop={false} style={styles.menu}>

<Text
onPress={() => this.props.onItemSelected('first')}
style={styles.item}>
First
</Text>

<Text
onPress={() => this.props.onItemSelected('second')}
style={styles.item}>
Second
</Text>

<Text
onPress={() => this.props.onItemSelected('third')}
style={styles.item}>
Third
</Text>
</ScrollView>
);
}
};

var styles = StyleSheet.create({
menuButton: {
marginTop: 20,
backgroundColor: '#777'
},
menu: {
flex: 1,
width: window.width,
height: window.height,
padding: 20,
},
item: {
fontSize: 16,
fontWeight: '300',
paddingTop: 20,
},
page: {
flex: 1,
alignItems: 'center',
backgroundColor: '#777'
},
pageContent: {
flex: 1,
alignItems: 'center',
top: 200,
},
menu: {
flex: 1,
width: window.width,
height: window.height,
padding: 20,
},
item: {
fontSize: 16,
fontWeight: '300',
paddingTop: 20,
},
});

module.exports = MenuNavigator;

并且索引文件应该只指向 Navigator:
const React = require('react-native');
const { AppRegistry, } = React;
const MenuNavigator = require('./SideMenuWithNavigation');

AppRegistry.registerComponent('MyApp', () => MenuNavigator);

关于menu - 带有路线或导航的 react-native-side-menu 的完整工作示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36771186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com