詳解react-navigation6.x路由庫的基本使用
react-native項目初始化
打開cmd,cd到在要進行rn項目建立的文件夾。
npx react-native init testRN
這里我的項目名設置為testRN,可以自行設定。
安裝react-native項目
連接安卓虛擬機或者usb調(diào)試真機,cd進創(chuàng)建好的項目根目錄,yarn android安裝并啟動。
yarn android
初次安裝完畢之后,手機未斷連的情況的話,后續(xù)只需虛擬機或者手機進入項目app,然后pc在項目根目錄yarn start啟動就可以了不用再次安裝,斷連之后可能得重新安裝。
yarn start
啟動好了之后在cmd界面按r可以更新。
react-navigation路由庫安裝
內(nèi)容建立在android端測試,我沒有測試ios。
一口氣安裝下列包。
yarn add @react-navigation/native react-native-screens react-native-safe-area-context @react-navigation/native-stack
對安卓進行額外配置,在testRN\android\app\src\main\java\com\testrn修改MainActivity.java文件。

代碼:
import android.os.Bundle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(null);
}
使用路由庫
修改app.js為以下代碼
import * as React from 'react';
import { View, Text } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
function HomeScreen() {
return (
<View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
<Text>Home Screen</Text>
</View>
);
}
const Stack = createNativeStackNavigator();
function App() {
return (
// NavigationContainer為路由的容器,將相關(guān)內(nèi)容都放在他中間
<NavigationContainer>
<Stack.Navigator>
{/* Stack.Screen為路由的窗口,name設置窗口名,用于跳轉(zhuǎn),窗口的組件內(nèi)容放在component */}
<Stack.Screen name="Home" component={HomeScreen} />
</Stack.Navigator>
</NavigationContainer>
);
}
export default App;

路由跳轉(zhuǎn)與路由傳參
import * as React from 'react';
// 添加Button
import { Button, View, Text } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
// 添加navigation參數(shù)
function HomeScreen({navigation}) {
return (
<View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
<Text>Home Screen</Text>
{/* 添加跳轉(zhuǎn)按鈕 */}
<Button
title="Go to Details"
// navigation.navigate('Details')用于跳轉(zhuǎn),其中的Details指向?qū)拇翱趎ame
onPress={() => navigation.navigate('Details')}
/>
</View>
);
}
function DetailsScreen() {
return (
<View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
<Text>Details Screen</Text>
</View>
);
}
const Stack = createNativeStackNavigator();
function App() {
return (
// NavigationContainer為路由的容器,將相關(guān)內(nèi)容都放在他中間
<NavigationContainer>
<Stack.Navigator>
{/* Stack.Screen為路由的窗口,name設置窗口名,用于跳轉(zhuǎn),窗口的組件內(nèi)容放在component */}
<Stack.Screen name="Home" component={HomeScreen} />
<Stack.Screen name="Details" component={DetailsScreen} />
</Stack.Navigator>
</NavigationContainer>
);
}
export default App;
設置路由標題
窗口默認會使用name作為標題名,當然也可以自行設定。
<Stack.Screen name="Home" component={HomeScreen} options={{ title: 'my home'}} />
用my home代替Home作為導航標題。
通常一級頁面跳轉(zhuǎn)去二級頁面時,也許會根據(jù)內(nèi)容不同展示不同的標題,這時候有就需要動態(tài)配置title。
<Stack.Screen name="Details" component={DetailsScreen}
options={({ route }) => ({ title: route.params.title })}
/>
然后只要在一級頁面跳轉(zhuǎn)時傳遞title就可以了。
<Button
title="Go to Details"
// navigation.navigate('Details')用于跳轉(zhuǎn),其中的Details指向?qū)拇翱趎ame
onPress={() => navigation.navigate('Details', { title: '二級頁面' })}
/>
注意這里如果一級頁面沒有傳遞title,最好傳遞一個空對象或者在二級窗口上設置初始值否則會報錯。
還可以手動更新title,使用navigation.setOptions(),其修改的是screen上的options中的屬性。
<Button
title="Update the title"
onPress={() => navigation.setOptions({ title: 'Updated!' })}
/>
自定義標題組件
設置headerTitle回調(diào)返回一個函數(shù)式組件,組件內(nèi)自定義,可以是圖片。
function LogoTitle() {
return (
<Image
style={{ width: 50, height: 50 }}
source={require('./src/img/details.png')}
/>
);
}
<Stack.Screen name="Home" component={HomeScreen}
options={{
title: 'My home',
headerTitle: (props) => <LogoTitle {...props} />
}}
/>
標題按鈕
一樣是在screen的options上,存在headerRight可以放按鈕。
<Stack.Screen name="Home" component={HomeScreen}
options={{
title: 'My home',
headerTitle: (props) => <LogoTitle {...props} />,
headerRight: () => (
<Button
onPress={() => alert('This is a button!')}
title="Info"
color="#fff"
/>
),
}}
/>
headerBackImageSource可以修改回退按鈕圖片。
<Stack.Screen name="Details" component={DetailsScreen}
options={({ route }) => (
{
title: route.params.title,
headerBackImageSource: detailsImg,
}
)}
/>
到此這篇關(guān)于詳解react-navigation6.x路由庫的基本使用的文章就介紹到這了,更多相關(guān)react-navigation6.x路由庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ReactNative支付密碼輸入框?qū)崿F(xiàn)詳解
這篇文章主要為大家介紹了ReactNative支付密碼輸入框?qū)崿F(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11
詳解Webpack+Babel+React開發(fā)環(huán)境的搭建的方法步驟
本篇文章主要介紹了詳解Webpack+Babel+React開發(fā)環(huán)境的搭建的方法步驟,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01
react-router-dom v6版本實現(xiàn)Tabs路由緩存切換功能
今天有人問我怎么實現(xiàn)React-Router-dom類似標簽頁緩存,很久以前用的是react-router v5那個比較容易實現(xiàn),v6變化挺大,但了解react的機制和react-router的機制就容易了,本文介紹react-router-dom v6版本實現(xiàn)Tabs路由緩存切換,感興趣的朋友一起看看吧2023-10-10

