Cách xử lý điều hướng trong React Native với điều hướng phản ứng 5
React-navigation là thư viện điều hướng xuất hiện trong đầu tôi khi chúng ta nói về điều hướng trong React Native.
Tôi là một fan hâm mộ lớn của thư viện này và nó luôn là giải pháp đầu tiên tôi sử dụng để xử lý điều hướng trong React Native. Điều này một phần là do nó có một API tuyệt vời và dễ dàng và rất dễ tùy chỉnh.
Tôi đang viết bài này vì phiên bản 5 vừa mới chuyển từ bản beta sang ổn định. Nó đi kèm với một số thay đổi về tính năng và thiết kế API mới cung cấp một cách đơn giản và khác biệt để khai báo các tuyến.
Trong bài viết này, chúng ta sẽ đi qua các API mới và xem xét các cách sử dụng chúng trong các ứng dụng của mình.
Ban đầu được xuất bản trên saidhayani.com
Đang cài đặt
Cách bạn cài đặt điều hướng phản ứng đã thay đổi một chút so với các phiên bản trước (> 4.x):
// > 4.x verions yarn add react-navigation
Cài đặt react-navigation 5 sẽ giống như sau:
// yarn yarn add @react-navigation/native // npm npm install @react-navigation/native
Các phiên bản mới nhất của điều hướng phản ứng sử dụng nhiều thư viện của bên thứ ba như trình xử lý cử chỉ phản ứng để tạo hoạt ảnh và xử lý chuyển tiếp. Vì vậy, bạn luôn cần phải cài đặt các thư viện đó.
// yarn yarn add react-native-reanimated react-native-gesture-handler react-native-screens react-native-safe-area-context @react-native-community/masked-view // npm npm install react-native-reanimated react-native-gesture-handler react-native-screens react-native-safe-area-context @react-native-community/masked-view
Màn hình động
API mới giới thiệu tính năng động trong việc khởi tạo các tuyến. Trước đây, nó được thực hiện tĩnh - về cơ bản, chúng ta phải xác định các Routes của mình trong một tệp cấu hình.
// @flow import React from "react"; import { createAppContainer, createSwitchNavigator } from "react-navigation"; import { createStackNavigator } from "react-navigation-stack"; /** ---------Screens----------- */ // import LaunchScreen from "../Containers/LaunchScreen"; import HomeScreen from "../Containers/HomeScreen"; import ProfileScreen from "../Containers/ProfileScreen"; import LoginScreen from "../Containers/LoginScreen"; const StackNavigator = createStackNavigator( { initialRouteName: "Home" }, { Home: { screen: HomeScreen }, Login: { screen: LoginScreen, headerMode: "none", }, Profile: { screen: ProfileScreen } ); export default createAppContainer(StackNavigator);
API mới đi kèm với các thành phần động. và làm cho điều hướng trở nên năng động hơn.
Cách mới để khai báo Routes sẽ giống như sau.
import React from "react" import { SafeAreaView, StyleSheet, View, Text, StatusBar } from "react-native" import { NavigationContainer } from "@react-navigation/native" import { createStackNavigator } from "@react-navigation/stack" const App: () => React$Node = () => { return ( ) } const Stack = createStackNavigator() const AppNavigation = () => { return ( ) } const HomeScreen = () => { return ( Home Screen ) }
Cách mới này năng động, đơn giản hơn để sử dụng và tương tự như API bộ định tuyến phản ứng.
Tùy chọn động
Đây là tính năng được cộng đồng yêu cầu nhiều nhất trong một thời gian dài. Tôi luôn gặp vấn đề với phương thức cũ (tĩnh) và thực sự khó thay đổi hành vi điều hướng động.
Phương pháp cũ => <4.x
Với các phiên bản cũ hơn của điều hướng phản ứng, chúng tôi phải xác định các tùy chọn tĩnh. Và không có cách nào để thay đổi điều này một cách linh hoạt.
static navigationOptions = { title: "Sign In", header: null, mode: "modal", headerMode: "none" };
Phương pháp mới (phiên bản 5)
React-navigation đi kèm với một phương thức động khá đơn giản. Chúng tôi có thể đặt các tùy chọn cho bất kỳ màn hình nào chỉ bằng cách sử dụng props
.
const AppNavigation = ({}) => { let auth = { authenticated: true, user: { email: "[email protected]", username: "John", }, } let ProfileScreenTitle = auth.authenticated ? auth.user.username : "Profile" return ( ) }
Với các tùy chọn động, tôi có thể thay đổi tiêu đề dựa trên xác thực. Ví dụ: nếu người dùng được xác thực, tôi có thể đặt tiêu đề màn hình là tên người dùng của người dùng hoặc tôi có thể thay đổi màu nền cho tiêu đề.
Điều này hữu ích hơn, đặc biệt nếu bạn đang sử dụng các chủ đề động hoặc nếu bạn sẵn sàng triển khai chế độ tối trong ứng dụng của mình.
Móc
Đây là tính năng yêu thích của tôi cho đến nay và nó tiết kiệm thời gian. API mới đã giới thiệu một số móc tùy chỉnh để thực hiện các hành động nhất định.
Trong các phiên bản trước, ví dụ: nếu tôi phải lấy Tên hiện tại của màn hình đang hoạt động, tôi phải tạo một số trợ giúp để làm điều đó cho tôi khá giống như sau.
export function getCurrentRouteName(): string | null { const tag = "[getCurrentRouteNameSync] " const navState = getStore().getState().nav const currentRoute = getActiveRouteState(navState) console.log(tag + " currentRoute > ", currentRoute) return currentRoute && currentRoute.routeName ? currentRoute.routeName : null }
API hooks giúp tôi tránh tất cả những điều này và giúp tôi truy cập API điều hướng dễ dàng hơn với một dòng duy nhất sử dụng hook.
Bây giờ tôi có thể dễ dàng lấy RouteName bằng useRoute
Hook.
import { useRoute } from "@react-navigation/native" const AboutScreen = ({ navigation }) => { const route = useRoute() return ( {/* Display the RouteName here */} {route.name} ) }
Chúng ta có thể làm điều tương tự với useNavigationState
Hook. Nó cho phép chúng tôi truy cập vào trạng thái điều hướng.
const navigationState = useNavigationState(state => state) let index = navigationState.index let routes = navigationState.routes.length console.log(index) console.log(routes)
React-navigation cũng cung cấp các hook khác, ví dụ:
useFocuseEffect
: một móc hiệu ứng phụ, khi các màn hình được tải, sẽ trả về màn hình được lấy nétuseLinking
: xử lý deepLinking
Tôi thực sự khuyên bạn nên kiểm tra chúng.
Kết thúc
API điều hướng phản ứng mới chắc chắn chuyển từ tĩnh sang động. Đó là một hướng đi tuyệt vời sẽ thay đổi hoàn toàn cách chúng ta xử lý điều hướng trong React Native. Các tuyến đường động là yêu cầu chính của người dùng điều hướng phản ứng và cách mới này sẽ giúp chúng tôi tạo ra trải nghiệm điều hướng người dùng tốt hơn.
Bạn có thể tìm thêm nội dung về React Native tại đây
Cảm ơn vì đã đọc
- GitHub
- Tham gia danh sách thư