react native notes
10/22/2024

todo

profiling

Components

  1. Pressable - 触摸事件
  2. Animated - 动画

libs

  1. react-native-reanimated - 动画
  2. nativewind - tailwindcss
  3. react-native-gesture-handler - 手势
  4. async-storage - 持久存储
  5. react-native-safe-area-context - 安全区域

Expo

tools

检查配置

npx expo config --type introspect

Theme

跟路由「_layout.ts」

import { DarkTheme, DefaultTheme, ThemeProvider } from "@react-navigation/native";
import { Stack } from "expo-router";
import { StatusBar } from "expo-status-bar";
import { useColorScheme } from "@/hooks/useColorScheme";
 
/* 根路由 */
export default function RootLayout() {
  const colorScheme = useColorScheme();
 
  const theme = colorScheme === "dark" ? DarkTheme : DefaultTheme;
 
  return (
    /* 主题 Provider */
    <ThemeProvider value={theme}>
      {/* 声明可跳转的路由栈 */}
      <Stack screenOptions={{ headerShown: false }}>
        <Stack.Screen name="animate/carousel" />
        <Stack.Screen name="animate/panRespnder-drag" />
      </Stack>
      {/* 状态栏 */}
      <StatusBar style="auto" animated />
    </ThemeProvider>
  );
}

son-router

import { Link } from "expo-router";
import { Text } from "react-native";
import { SafeAreaView } from "react-native-safe-area-context";
import { useTheme } from "@react-navigation/native";
 
export default function Page() {
  const { colors } = useTheme();
  return (
    <SafeAreaView style={{ flex: 1, alignItems: "center" }}>
      <Text style={[{ color: colors.text }]}>to /</Text>
    </SafeAreaView>
  );
}

router

基于文件路由系统,跟 nextjs 类似。

动态路由通过 [slug] 文件夹来实现,通过 useLocalSearchParams 来获取参数。