React Native Navigation
Navigation
- Tab Bar
- Drawer
- Navigation Stack
- Navigation + Web
Tab Bar
import React from 'react';
import {Platform} from 'react-native';
import {NavigationContainer} from "@react-navigation/native";
import {createBottomTabNavigator} from "@react-navigation/bottom-tabs";
import {createMaterialTopTabNavigator} from "@react-navigation/material-top-tabs"
import {createMaterialBottomTabNavigator} from "@react-navigation/material-bottom-tabs"
import {HomeView} from "./components/HomeView";
import {AboutView} from "./components/AboutView";
let Tab = createBottomTabNavigator();
if (Platform.OS == "android") {
Tab = createMaterialTopTabNavigator();
}
const App = () => {
return (
<NavigationContainer>
<Tab.Navigator>
<Tab.Screen name={"Home"} component={HomeView} />
<Tab.Screen name={"About"} component={AboutView} />
</Tab.Navigator>
</NavigationContainer>
)
}
export default App;
Drawer
import React from 'react';
import {NavigationContainer} from "@react-navigation/native";
import {createDrawerNavigator} from "@react-navigation/drawer";
import {HomeView} from "./components/HomeView";
import {AboutView} from "./components/AboutView";
let Drawer = createDrawerNavigator();
const App = () => {
return (
<NavigationContainer>
<Drawer.Navigator initialRouteName={"Home"}>
<Drawer.Screen name={"Home"} component={HomeView} />
<Drawer.Screen name={"About"} component={AboutView} />
</Drawer.Navigator>
</NavigationContainer>
)
}
export default App;
import React from 'react';
import {View, Text, Button, StyleSheet} from 'react-native';
export function HeaderView(props) {
return (
<View style={styles.headerView}>
<Button
onPress={()=>{props.navigation.toggleDrawer()}}
title={"Menu"}
style={styles.menuButton}
/>
<Text style={styles.headerText}>{props.title}</Text>
</View>
)
}
const styles = StyleSheet.create({
headerView: {
flexDirection: 'row',
},
menuButton: {
paddingTop: 18,
paddingBottom: 8,
},
headerText: {
fontSize: 18,
textAlign: 'left',
paddingLeft: 8,
flex: 1,
paddingTop: 8,
paddingBottom: 8,
}
})
import React from 'react';
import {WebView} from "react-native-webview";
import {HeaderView} from "./HeaderView";
export function AboutView(props) {
return (<>
<HeaderView {...props} title={"About"}/>
<WebView
source={ {uri: "https://example.com"} }
/>
</>)
}
import React from 'react';
import {NavigationContainer} from "@react-navigation/native";
import {createStackNavigator} from "@react-navigation/stack";
import {HomeView} from "./components/HomeView";
import {AboutView} from "./components/AboutView";
let Stack = createStackNavigator();
const App = () => {
return (
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen name={"Home"} component={HomeView} />
<Stack.Screen name={"About"} component={AboutView} />
</Stack.Navigator>
</NavigationContainer>
)
}
import React from 'react';
import {Platform, Button, View} from 'react-native';
import {WebView} from "react-native-webview";
export function HomeView(props) {
let uri = 'https://framework7.io/kitchen-sink/core/?theme=ios'
if (Platform.OS == 'android') {
uri = 'https://framework7.io/kitchen-sink/core/?theme=md'
}
return (
<>
<View>
<Button
onPress={()=>{props.navigation.navigate('About')}}
title={"About"}
/>
</View>
<WebView
source={ {uri: uri} }
/>
</>)
}
Navigation + Web View
import React from 'react';
import {NavigationContainer} from "@react-navigation/native";
import {createStackNavigator} from "@react-navigation/stack";
import {HomeView} from "./components/HomeView";
import {AboutView} from "./components/AboutView";
import {StackWebView} from "./components/StackWebView";
let Stack = createStackNavigator();
const App = () => {
return (
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen name={"Home"} component={HomeView} />
<Stack.Screen name={"About"} component={AboutView} />
<Stack.Screen name={"Web"} component={StackWebView} />
</Stack.Navigator>
</NavigationContainer>
)
}
import React from 'react';
import {Platform, Button, View} from 'react-native';
import {WebView} from "react-native-webview";
export function StackWebView(props) {
let uri = "https://example.com"
if (props.route.params != null) {
uri = props.route.params.uri
}
return <WebView source={{uri: uri}} />;
}
import React, {useRef} from 'react';
import {Platform, Button, View} from 'react-native';
import {WebView} from "react-native-webview";
export function HomeView(props) {
const webView = useRef(null);
let uri = 'https://macao-library.netlify.com/'
function handleStateChange(navState) {
if (navState.url == "https://macao-library.netlify.com/") {
return;
}
props.navigation.navigate('Web', {uri: navState.url});
webView.current.stopLoading();
if (Platform.OS == "android") {
webView.current.goBack();
}
}
return (
<WebView
ref={webView}
source={{uri: 'https://macao-library.netlify.com/'}}
onNavigationStateChange={handleStateChange}
/>
)
}
Summary
- Tab Bar
- Drawer
- Navigation Stack
- Navigation + Web
React Native Navigation
By makzan
React Native Navigation
- 371