React-Native 仿喜马拉雅APP项目笔记(多环境配置 项目配置路径 堆栈式导航)
Posted усил
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了React-Native 仿喜马拉雅APP项目笔记(多环境配置 项目配置路径 堆栈式导航)相关的知识,希望对你有一定的参考价值。
✨项目搭建及初始化
- 📐创建项目前,先切换成淘宝源
npx nrm use taobao
补充:🌈如果之后需要切换回官方源可使用 npx nrm use npm
- 📏创建项目
npx react-native init
项目名称
–template react-native-template-typescript
- 📐配置文件
- 📏增加项目目录(项目根路径)
✨多环境配置
- 📐下载第三方插件
react-native-config
- 📏修改
android
文件中app/src/build.gradle
在文件末尾添加
apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle"
- 📏在终端进入到
ios文件
执行命令pod install
- 📐在项目根目录下创建
.env
文件 - 📏接下来在使用的位置添加以下代码
import Config from "react-native-config";
rend()
return (
<Text>Config.API_URL</Text>
)
✨项目配置路径
-
📐下载第三方插件库
babel-plugin-module-resolver
-
📏修改
babel.config.js
module.exports =
presets: ['module:metro-react-native-babel-preset'],
plugins: [
[
'module-resolver',
root: ['./src'],
alias:
'@/utils': './src/utils',
'@/pages': './src/pages',
'@/navigator': './src/navigator',
'@/models': "./src/models",
'@/config': "./src/config",
'@/components': "./src/components",
'@/assets': './src/assets',
]
]
;
- 📐修改
tsconfig.json
"compilerOptions":
"baseUrl": "./src",
"paths":
"@/assets/*": ["assets/*"],
"@/components/*": ["components/*"],
"@/config/*": ["config/*"],
"@/models/*": ["models/*"],
"@/navigator/*": ["navigator/*"],
"@/pages/*": ["pages/*"],
"@/utils/*": ["utils/*"]
,
使用时,直接 @
就有提示
✨安装导航器
- 📏安装导航器核心插件
@react-navigation/native
- 📐并且安装核心插件的依赖
react-native-screens
react-native-safe-area-context
- 📏配置原生APP
- 进入到
iso
执行命令npx pod-install ios
- 编辑
MainActivity.java
位于android/app/src/main/java/<your package name>/MainActivity.java
.
- 进入到
添加下面代码
package com.ximalaya;
import android.os.Bundle;
import com.facebook.react.ReactActivity;
public class MainActivity extends ReactActivity
/**
* Returns the name of the main component registered from javascript. This is used to schedule
* rendering of the component.
*/
@Override
protected String getMainComponentName()
return "ximalaya";
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(null);
编写堆栈式导航(navigator/index.js
)
import React from "react";
import NavigationContainer from "@react-navigation/native";
import CardStyleInterpolators, createStackNavigator, HeaderStyleInterpolators, StackNavigationProp from "@react-navigation/stack";
import BottomTabs from "./BottomTabs";
import Platform, StyleSheet from "react-native";
// 定义堆栈式导航(有哪些类型)
export type RootStackParamList =
// 底部导航
BottomTabs:
screen?: string;
;
// 创建堆栈式导航
let Stack = createStackNavigator<RootStackParamList>()
class Navigator extends React.Component
render()
return (
<NavigationContainer>
<Stack.Navigator
screenOptions=
// 使 android 和 ios 的动画样式一致
headerMode:"float",
// 头部文字居中
headerTitleAlign: "center",
// 定义动画一致
headerStyleInterpolator: HeaderStyleInterpolators.forUIKit,
cardStyleInterpolator:CardStyleInterpolators.forHorizontalIOS,
// 打开 android 中的手指切换
gestureEnabled: true,
// 设置安装屏幕切换为水平(默认是垂直)
gestureDirection: 'horizontal',
// 修改样式
headerStyle:
...Platform.select(
android:
elevation: 0,
borderBottomWidth: StyleSheet.hairlineWidth,
,
)
>
// 底部导航
<Stack.Screen name="BottomTabs" component=BottomTabs options=headerTitle: "首页"/>
</Stack.Navigator>
</NavigationContainer>
)
// 将导航配置信息导出(后期在项目跳转是可以携带参数)
export type RootStackNavigation = StackNavigationProp<RootStackParamList>;
export default Navigator
标签导航 BottomTabs
import React from "react";
import RouteProp, TabNavigationState, getFocusedRouteNameFromRoute from "@react-navigation/native";
import createBottomTabNavigator from "@react-navigation/bottom-tabs"
import RootStackNavigation, RootStackParamList from "./index";
import Home from "@/pages/Home"
import Account from "@/pages/Account"
import Listen from "@/pages/Listen"
import Found from "@/pages/Found"
import LogBox from "react-native";
// 底部导航(有哪些标签)
export type BottomTabParamList =
Home: undefined;
Listen: undefined;
Found: undefined;
Account: undefined;
// 创建底部导航
const Tab = createBottomTabNavigator<BottomTabParamList>();
type Route = RouteProp<RootStackParamList, "BottomTabs"> &
state?: TabNavigationState<BottomTabParamList>;
;
// 接收参数接口
interface IProps
navigation: RootStackNavigation,
// 接收堆栈式导航中的底部导航参数
route: Route
function getHeaderTitle(route: Route)
// getFocusedRouteNameFromRoute 内置获取当前点击的标签名(对应 BottomTabParamList )
const routeName = getFocusedRouteNameFromRoute(route)
switch (routeName)
case 'Home':
return '首页';
case 'Listen':
return '我听';
case 'Found':
return '发现';
case 'Account':
return '账户';
default:
return '首页';
class BottomTabs extends React.Component<IProps>
componentDidUpdate()
const navigation, route = this.props;
navigation.setOptions(
headerTitle: getHeaderTitle(route)
)
// 忽略掉在 android 中的警告
componentDidMount()
LogBox.ignoreAllLogs()
render()
return (
<Tab.Navigator
tabBarOptions=
activeTintColor: '#f86442',
>
<Tab.Screen name="Home" component=Home options= tabBarLabel: '首页' />
<Tab.Screen name="Listen" component=Listen options= tabBarLabel: '我听' />
<Tab.Screen name="Found" component=Found options= tabBarLabel: '发现' />
<Tab.Screen name="Account" component=Account options= tabBarLabel: '我的' />
</Tab.Navigator>
)
export default BottomTabs
✨总结
由于React Native
更新迭代速度也比较快,其他插件可能跟不上,导致无法兼容,出现一些奇怪的问题。可能现在这个方法可以使用,过一段时间后就不能使用了。刚开始使用就是吃了这个亏,出现了一些小问题。建议看官方文档以及结合实际调试进行开发。
下面是我目前使用到的插件及其版本
这里需要注意:@react-navigation/bottom-tabs
下载的版本是 5.1.1
。截至当前最新的版本是 6.0.9
,这个版本我出现了一个问题:出现两个底部条。
以上是关于React-Native 仿喜马拉雅APP项目笔记(多环境配置 项目配置路径 堆栈式导航)的主要内容,如果未能解决你的问题,请参考以下文章
ReactNative+TypeScript仿喜马拉雅开发App
ReactNative+TypeScript仿喜马拉雅开发App
高仿京东Android App,集成React-Native热更