# CTMobile-React
**Repository Path**: playerljc/CTMobile-React
## Basic Information
- **Project Name**: CTMobile-React
- **Description**: CTMobile的React实现
- **Primary Language**: JavaScript
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2019-01-03
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
[english](https://github.com/playerljc/CTMobile-React "english") | 简体中文
## CtMobile-React
一个移动端框架,支持页面的多种形式切换,页面转场,页面传值,通知等,适用于开发单页面应用(SPA),混合开发(Hybrid),Cordova开发,CtMobile-React是在["CtMobile"](https://github.com/playerljc/CTMobile "点击了解CtMobile")的基础之上,加上了对[React](https://reactjs.org/ "点击了解React")的支持。
## 开发灵感
期初刚接触Hybrid开发的时候公司选用的是jQueryMobile+Cordova的组合来开发混合应用,在用jQueryMobile的时候遇到了很多问题如管理类和Dom之间总是不能很好的有机结合在一起,当初的想法是如果在浏览器端每个局部页面和其管理类能像Android中的Activity一样就好了,所以灵感就来了,CtMobile的实现完全借助于Android中的Activity来实现。
## 三大概念
CtMoble中有三个重要的感念,分别是**Page**,**Router**,**BorasdCast**.
其中Page用来管理页面的创建,初始化,销毁的整个生命周期,Router管理这个框架的路由跳转,BorasdCast用来管理通知和页面之间的数据的通信交互。
## Page(页面)的启动模式
1. standard
多例模式
2. single
单例模式(当点击返回时会销毁)
3. singleInstance
完全的单例模式(在任何时候都不会被销毁)
4. result
带有返回值的(可以向父页面带回返回值)
5. singleInstanceResult
带有返回值的完全单例(不会被销毁,可以向父页面带回返回值)
## Page(页面)的转场效果
页面之间切换支持多种过度效果
1. slideleft-从右到左(overlay)
2. slideright-从左到右(overlay)
3. slideup-从下到上(overlay)
4. slidedown-从上到下(overlay)
5. wxslideleft-类似于微信的从右到左
6. wxslideright-类似于微信的从左到右
7. wxslideup-类似于微信的从下到上
8. wxslidedown-类似于微信的从上到下
9. pushslideleft-从右到左(push)
10. pushslideright-从左到右(push)
11. pushslideup-从下到上(push)
12. pushslidedown-从上到下(push)
13. material-Android Material的风格
## 其他功能
1. 页面之间的传值
2. 新增页面是否增加历史栈
3. 功能可以通过配置和api两种方式进行调用
## 安装
需要依赖react和react-dom,使用的打包工具没有限制webpack,gulp...
```bash
$ npm install react --save
$ npm install react-dom --save
$ npm install @ctmobile/react --save
```
## API文档
[docs](https://playerljc.github.io/ctmobile-react/index.html)
## 快速开始
**1. 初始化应用**
--------
```js
import CtMobile from '@ctmobile/react';
const Router = {
index: {
component: import(/* webpackChunkName: "index" */ "../pages/index"),
},
info: {
component: import(/* webpackChunkName: "info" */ "../pages/info"),
},
about: {
component: import(/* webpackChunkName: "about" */ "../pages/about"),
},
};
const App = CtMobile.CtMobileFactory.create({
supportCordova: false,
linkCaptureReload: false,
router: Router,
});
```
详细参数解释请参考[属性配置](#属性配置)。
**2. 路由**
-----
在初始化应用的代码中需要配置router选项,router是一个对象,对象的键唯一标识一个页面,值为一个对象,有两个属性component和config
* component
返回一个Promise对象,代表这个页面的逻辑处理类,Promise中返回的对象应该是继承了Page.WrappedPage类的一个子类,Page.WrappedPage继承了React.Component。
如用Webpack进行开发的时候可以定义成
```js
component: import(/* webpackChunkName: "about" */ "../pages/about")
```
* config
* transition: {string} - 过度类型
* mode: {string} - 启动类型
* intentfilterAction: {string} - 通知的actioon
* intentfilterCategorys: {string} - 通知的categorys
* intentfilterPriority: {string} - 通知的proirity
**3. 编写页面对应的Page**
--------------
```js
import React from 'react';
import CtMobile from '@ctmobile/react';
export default class extends CtMobile.Page.WrappedPage {
constructor(props) {
super(props);
}
/**
* @override
*/
pageCreate(){
console.log('页面初始化');
}
/**
* @override
*/
pageShow() {
console.log('page的DOM显示时调用');
}
/**
* @override
*/
pageBeforeDestory(){
console.log('page的DOM销毁之前调用');
}
render() {
return(