-
原因:
Expo提供了与 Next.js 的集成解决方案,可以在同一个项目中使用React Native和Next.js。 -
示例:通过
Expofor Web,可以使用React Native编写代码,同时在 Web 上运行,这时候Next.js的文件命名规范就显得很自然。 -
好处:这种集成方式允许开发者使用相同的代码库,同时为移动端和 Web 端提供支持。
导航类型:
Tabs.Screen 用于底部标签导航,适用于需要在屏幕之间快速切换的情况。 Stack.Screen 用于栈式导航,适用于需要在屏幕之间进行推入和弹出(前进和后退)操作的情况。
导航结构:
Tabs.Screen 放在 Tab.Navigator 内部。 Stack.Screen 放在 Stack.Navigator 内部。
界面展示:
Tabs.Screen 会在底部显示一个标签栏,每个标签对应一个屏幕。 Stack.Screen 通常会包含一个标题栏和返回按钮,用于导航回到前一个屏幕。
示例用法对比:
// Tabs.Screen 示例
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'
const Tab = createBottomTabNavigator()
;<Tab.Navigator>
<Tab.Screen
name='Home'
component={HomeScreen}
/>
<Tab.Screen
name='Settings'
component={SettingsScreen}
/>
</Tab.Navigator>// Stack.Screen 示例
import { createStackNavigator } from '@react-navigation/stack'
const Stack = createStackNavigator()
;<Stack.Navigator>
<Stack.Screen
name='Home'
component={HomeScreen}
/>
<Stack.Screen
name='Details'
component={DetailsScreen}
/>
</Stack.Navigator>不过有一个细节,就是Tab.Navigator和Stack.Navigator,本来不这样写是会出问题的,但是expo-router封装了导航逻辑,使得 和 组件可以直接使用
ListEmptyComponent 是 React Native 中 FlatList 和 SectionList 组件的一个属性,用于在列表为空时渲染自定义组件。它的主要作用是提供一种方式,在列表数据为空时显示一个占位内容或提示信息,而不是显示空白页面。
<FlatList
data={[]}
keyExtractor={(item) => item.id}
renderItem={({ item }) => (
<Text className='text-2xl text-white'>{item.id}</Text>
)}
...
ListEmptyComponent={() => (
<EmptyState
title='No Videos Found'
subtitle='No videos created yet'
/>
)}
/>比如在 FlateList 中的用法是,必须data为空,ListEmptyComponent组件中的内容才能正常渲染, 下图中,若data内容为空,屏幕中间则会出现一个 🔍
RefreshControl 是 React Native 提供的一个组件,用于实现下拉刷新功能。它通常与 ScrollView``、FlatList 和 SectionList 等滚动组件配合使用,允许用户通过下拉手势来刷新内容。
功能:
- 下拉刷新:当用户向下拉动列表或滚动视图时,会触发刷新操作。
- 自定义刷新指示器:你可以自定义刷新指示器的颜色、大小等属性。
