# react to typescript
**Repository Path**: dyb881/react-ts
## Basic Information
- **Project Name**: react to typescript
- **Description**: 基于 create-react-app 和 typescript 的 React 项目工程
- **Primary Language**: TypeScript
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 27
- **Forks**: 8
- **Created**: 2018-08-29
- **Last Updated**: 2025-05-21
## Categories & Tags
**Categories**: react-extensions
**Tags**: None
## README
# 已重构到 [react-app](https://github.com/dyb881/react-app)
# react 项目包
---
[
](https://gitee.com/dyb881/react-ts/stargazers)
基于 create-react-app v2 --typescript 的项目工程
[使用 react-app-rewired 拓展配置](https://gitee.com/dyb881/react-ts/blob/master/config-overrides.js)
[状态管理默认使用 mobx](https://gitee.com/dyb881/react-ts/blob/master/src/store/index.ts)
[并已用 react-router 搭建页面框架,在页面配置文件配置即可添加新页面](https://gitee.com/dyb881/react-ts/blob/master/src/page/config.ts)
默认使用 antd | antd-mobile 作为主体 UI,已配置按需加载,推荐在 component 内部二次封装再导出,方便统一修改
支持 electron 跨平台桌面应用开发,需要自行引用包
这并不是一个框架,而是一个 react 项目的文件管理习惯
每一次开发项目都可进行优化以及一些组件和工具函数的加入
定期更新依赖版本
### 开发模式
---
业务上拆分为一级路由,一个页面一个文件夹,注册在 page/config.ts
数据储存也按业务区分为单个文件到 store 并实例化到 store/index.ts 中,组成一个主 store,多个子 store,在 App.tsx 中注入,注入前可执行预设,比如自动登录判断等操作
外部引用大组件适当使用import()分包
如果是React组件 可以使用 React.lazy() and 
[TsLint代码审查](https://gitee.com/dyb881/react-ts/blob/master/tslint.json)
[项目文档](https://gitee.com/dyb881/react-ts/blob/master/PROJECT.md)
### 技术栈
---
- 使用语言
  - ES next
  - TypeScript
- 脚手架
  - create-react-app 主体
  - react-app-rewired 拓展配置
  - tslint 代码审查
- CSS 处理
  - 预处理 less scss sass
  - 后处理 postcss
  - 初始化 normalize.css
  - 模块化 CSS Modules
- 默认依赖
  - 热更新 react-hot-loader
  - 动画 react-addons-css-transition-group
  - 路由 react-router
  - UI库 antd antd-mobile
  - 状态管理 mobx mobx-react
  - 接口拦截并返回模拟数据数据 mockjs fetch-mock
  - 图片预览 react-zmage [已使用动态加载 /src/component/file/img/index.tsx 第7行](https://gitee.com/dyb881/react-ts/blob/master/src/component/file/img/index.tsx)
- 工具函数
  - [fetch 异步请求封装](https://gitee.com/dyb881/react-ts/blob/master/src/tool/request/index.ts)
  - [dom 插入工具](https://gitee.com/dyb881/react-ts/blob/master/src/tool/dom.ts)
  - [文件转化以及图片裁剪](https://gitee.com/dyb881/react-ts/blob/master/src/tool/file.ts)
### 目录
---
```
│  config-overrides.js react-app-rewired 配置文件
│  NORM.md 开发规范文档
│  PROJECT.md 项目文档
│  README.md 描述文档
│  tsconfig.json ts编译配置
│  tslint.json ts代码审查配置
├─public
│  config.js 项目配置
└─src
  ├── App.less 全局样式
  ├── App.test.tsx
  ├── App.tsx 项目初始化
  ├── api.ts API请求工具初始化
  ├── api_mock.ts API模拟数据注册
  ├── react-app-env.d.ts 外部引用类型描述
  ├── config.ts 主配置
  ├── index.tsx 入口文件
  ├── component 组件
  │   ├── mobile 移动端组件
  │   │   ├── antd antd 组件二次封装
  │   │   ├── header 标题栏
  │   │   └── tabBar 底部导航
  │   ├── pc pc端组件
  │   │   └── antd antd 组件二次封装
  │   ├── file 文件
  │   │   ├── get_file.tsx 获取文件
  │   │   └── img 图片组件 - 包含预览功能
  │   ├── form 表单工具组件
  │   ├── router 批量路由页面注册
  │   └── transition/style.less 全局 react-addons-css-transition-group 动画注册
  ├── interface 公共接口
  ├─page 所有页面
  │  │  config.ts 页面配置
  │  │  index.tsx 注册及主体页面
  │  ├─Folder1 首页1
  │  └─Folder2 页面2
  ├─store 状态管理
  │  index.ts 主状态
  │  view.ts  视图状态
  │  user.ts  用户状态
  │  File1.ts 子状态1
  │  File2.ts 子状态2
  └── tool 工具函数
      ├── city.json 省市县数据
      ├── dom.ts dom相关
      ├── file.ts 文件相关
      ├── function.less less函数
      ├── index.ts 常用
      ├── mock.ts 模拟数据
      ├── reg_exp.ts 正则
      ├── request 请求封装
      └── string. 字符串相关
```
### 安装教程
---
1. npm config set registry https://registry.npm.taobao.org // 指定到淘宝镜像
2. npm install --global yarn // 安装 yarn
4. yarn // 安装项目
5. yarn start // 开发模式
6. yarn build // 打包
7. yarn serve // 以服务运行打包后的文件
8. yarn electron-start // 运行客户端开发模式,前提需要先运行 yarn start
9. yarn packager // 客户端打包,前提需要先运行 yarn build