react native 快速开发模板,有问题可以提 issue
| 名称 | 方案 |
|---|---|
| 路由库 | react navigation |
| 状态管理 | mobx + context |
| SVG 图标 | react-native-svg 搭配 react-native-iconfont-cli |
| 本地存储 | @react-native-async-storage/async-storage |
| 时间处理 | dayjs |
| UI 库 | native-base |
| 唯一 ID | uuid & react-native-get-random-values |
| 消息推送 | react-native-push-notification |
| 日志工具 | react-native-logs |
| 动画 | lottie-react-native lottie |
| 文件管理 | react-native-fs |
| 视频播放 | react-native-video |
| 扫二维码 | react-native-camera |
| 阴影效果 | react-native-drop-shadow |
| Table | react-native-table-component |
| network-logger | react-native-network-logger |
| 分包拆包 | TODO |
src
├── App.tsx
├── assets
│ ├── iconfont 图标
│ └── img 图片
├── baseUI 通用UI
├── config 配置
│ ├── index.ts 常量配置
│ ├── theme.ts 主题配置
│ └── request.ts http 请求配置
├── global.d.ts 全局类型定义
├── models 状态管理目录
│ ├── account.ts
│ └── index.ts
├── navigator navigation 配置
│ ├── MainTab.tsx
│ ├── MainTabBar.tsx
│ └── index.tsx
├── pages 页面
│ ├── contact
│ │ └── index.tsx
│ ├── detail
│ │ └── index.tsx
│ ├── h5
│ │ └── index.tsx
│ ├── home
│ │ └── index.tsx
│ ├── login
│ │ ├── index.tsx
│ │ └── style.ts
│ └── me
│ └── index.tsx
├── services 接口
│ └── account.ts
├── types 类型目录
│ ├── ResData.ts
│ └── UserInfo.ts
├── utils 工具函数
│ ├── auth.ts 登录相关
│ ├── screen.ts 页面相关
│ ├── storage.ts 本地存储
└── wrappers
import * as React from 'react'; import {rootStore, StoreContext} from './models'; import Navigator from './navigator'; import {NativeBaseProvider} from 'native-base'; import {loadCacheUInfo} from './utils/auth'; import {View, Text} from 'react-native'; export default function App() { const [isLoaded, setIsLoaded] = React.useState(false); React.useEffect(() => { beforeBootstrap().then(() => { setIsLoaded(true); }); }, []); // 在应用主框架启动之前要干的事情 // 可以在这里配置你想干的事情 const beforeBootstrap = async () => { // 从 storage 中取出数据, 加载到内存中 return await loadCacheUInfo(); }; if (!isLoaded) { return ( <View style={{flex: 1, justifyContent: 'center', alignItems: 'center'}}> <Text>加载中...</Text> </View> ); } return ( <StoreContext.Provider value={rootStore}> <NativeBaseProvider> <Navigator /> </NativeBaseProvider> </StoreContext.Provider> ); }
Android
# 构建生产包 cd android && ./gradlew assembleRelease
IOS
mobx + context
参考 https://www.npmjs.com/package/react-native-iconfont-cli
# 创建 iconfont.json npx iconfont-init # 将 SVG 处理为 React Component npx iconfont-rn
修改 ViewPropTypes 的导入,node_modules/react-native-camera/src/RNCamera.js
20230413141005
可以在 yarn 装依赖之后,执行 sh fix-camera.sh 修复