react-native 路由與選單demo
路由使用: react-native-router-flux
選單使用: react-native-side-menu
1. 效果
初始進入頁面
點選上方bar後
2. 元件
1. 選單元件
簡單定義了一個選單列表 列表中每一個item的點選都會重新重新整理整個介面 (使用父元件傳遞的方法)
import React, {Component} from 'react';
import { FlatList } from 'react-native-gesture-handler';
import {View, Text, TouchableHighlight, StyleSheet} from 'react-native';
const menuList = [
{
"id": "home",
"name": "首頁",
"routeKey": "fir"
},
{
"id": "pwd",
"name": "密碼管理",
"routeKey": "pwd"
},
{
"id": "notify_test",
"name": "推送測試",
"routeKey": "notify_test",
}
];
/**
* <FlatList data={menuList} renderItem={this.renderOneMenu}
keyExtractor = {item => item.id}/>
*/
class MyMenu extends Component {
constructor(props) {
super(props);
this.renderOneMenu = this.renderOneMenu.bind(this); // 需要bind一下 不然函式內訪問this存在問題
}
render() {
return (
<View>
<Text style={styles.head}>Menu</Text>
<FlatList data={menuList} renderItem={this.renderOneMenu}
keyExtractor = {item => item.id}/>
</View>
)
}
renderOneMenu({item}) {
let _this = this;
return (
<View>
<TouchableHighlight onPress = {() => _this.props.menuSelected(item)}>
<Text style={styles.item}> {item.name} </Text>
</TouchableHighlight>
</View>
)
}
}
const styles = StyleSheet.create({
head: {
fontSize: 20,
color: 'blue',
},
item: {
fontSize: 16,
fontWeight: '300',
paddingTop: 10,
left: 15
},
})
export default MyMenu;
2. 主頁面元件
包含選單和路由
狀態中定了初始狀態的route
(部分元件程式碼未貼出 )
import React, {Component} from 'react';
import Fir from "./srcjs/na/ui/fir";
import Pwd from "./srcjs/na/ui/Pwd";
import MyMenu from './srcjs/na/menu';
import MyBar from './srcjs/na/mybar';
import NotifyTest from './srcjs/na/ui/noti_test';
import {
Router,
Stack,
Scene,
Actions,
} from 'react-native-router-flux';
import {StyleSheet} from 'react-native';
import SideMenu from 'react-native-side-menu';
class Main extends Component {
constructor(props) {
super(props);
this.state = {
menuOpen: false,
routeKey: 'pwd',
}
this.openMenu = this.openMenu.bind(this);
this.closeMenu = this.closeMenu.bind(this);
this.menuSelected = this.menuSelected.bind(this);
window.openMenu = this.openMenu;
window.switchTo = this.switchTo;
window.closeMenu = this.closeMenu;
}
switchTo(key) {
Actions.push(key);
}
closeMenu() {
this.setState({
menuOpen: false,
})
}
openMenu() {
this.setState({
menuOpen: true,
})
}
menuSelected(item) {
this.setState({
menuOpen: false,
routeKey: item.routeKey,
});
}
render() {
const menu = <MyMenu menuSelected={this.menuSelected} />;
return (
<SideMenu menu={menu} width={10} isOpen={this.state.menuOpen}>
<Router>
<Stack key="root">
<Scene key="fir" initial={'fir' == this.state.routeKey} navBar={MyBar} back={false} component={Fir} title="fir" titleStyle={styles.routeTitle}></Scene>
<Scene key="pwd" initial={'pwd' == this.state.routeKey} navBar={MyBar} back={false} component={Pwd} title="密碼" titleStyle={styles.routeTitle}></Scene>
<Scene key="notify_test" initial={'notify_test' == this.state.routeKey} navBar={MyBar} back={false} component={NotifyTest}></Scene>
</Stack>
</Router>
</SideMenu>
)
}
}
const styles = StyleSheet.create({
routeTitle: {
justifyContent: 'center',
flex: 1,
color: 'red',
}
})
export default Main;
相關文章
- ztree樹形選單demo
- (四)選單導航及路由設定路由
- React Router、And、Redux動態選單和動態路由ReactRedux路由
- 觀察者+配置中心動態策略路由Demo路由
- vue 動態載入路由,渲染左側選單欄Vue路由
- OSPF路由 與 ISIS路由 與路由學習對比路由
- 簡單的websocket demoWeb
- PHP--簡單DemoPHP
- R::shiny 點選事件-Demo事件
- Java NIO的簡單demoJava
- SpringBoot簡單DemoSpring Boot
- 360路由器V4與小米路由4簡單體驗,百元路由器誰更好?路由器
- jQuery與CSS二級下拉選單jQueryCSS
- 淺析路由策略與策略路由路由
- 【摸魚神器】一次搞定 vue3的 路由 + 選單 + tabsVue路由
- 網路中IP是怎樣選路的?選路原理及簡單的路由表路由
- React-native專案入門與思考React
- 分享cropper剪下單張圖片demo
- Laravel 用 abstract 與 interface 寫一個簡單的支付回撥 demoLaravel
- 最簡單的可取消多選效果(以從水果籃中挑選水果為例)【jsDEMO】JS
- PCIE思考:簡單路由路由
- ElementUI表格行編輯單元格編輯支援(輸入框,選擇框)DemoUI
- 輕量級web富文字框——wangEditor使用手冊(4)——配置下拉選單 demoWeb
- (系列十)Vue3中選單和路由的結合使用,實現選單的動態切換(附原始碼)Vue路由原始碼
- 前端路由與後端路由的思考前端路由後端
- 最簡單的Flutter路由教程——跳轉、動畫與傳參Flutter路由動畫
- vue-cli 預設路由再子路由選中下的選中狀態問題Vue路由
- 仿寫美團酒店日期選擇元件(小程式、React-Native)元件React
- 簡單監測iOS卡頓的demoiOS
- 路由策略和策略路由配置與管理-1路由
- React-Native入門(2)-簡單闡述跳轉React
- vue 動態選單以及動態路由載入、重新整理採的坑Vue路由
- WEEX-EROS | 移植自網易嚴選 app demoROSAPP
- Flutter vs Native與React-Native:檢查效能FlutterReact
- 輕量級web富文字框——wangEditor使用手冊(3)——如何自定義配置選單 demoWeb
- Vlan間路由實驗(單臂路由實現法)薦路由
- HTML6實現摺疊選單與手風琴選單的例項程式碼HTML
- 無線路由器怎麼選路由器