# react-native-starter-kit
**Repository Path**: hzerica/react-native-starter-kit
## Basic Information
- **Project Name**: react-native-starter-kit
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 4
- **Forks**: 2
- **Created**: 2016-07-18
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 示范工程
## 页面
* 在pages下放置页面组件. 如果页面数量较多,可以在pages下组织子文件夹,参考`页面子路由`
* 每个页面使用routerDecorator来定义自己的path(通常不应/开头)
* 在src/pages/index.js里import并加入对应的组件.
## 子路由
* 如多个页面具有较强关联性,可组织成子路由
* 在上级路由(如`src/pages`)中建立子文件夹,如user
* 在子文件夹下建立index.js, 内容如下:
```javascript
import Login from './Login';
export const routeConfig = {
path: 'user',
childRoutes: [
Login,
].map(v => v.routeConfig || ),
};
```
* 建立对应的Login组件,并通过routerDecorator指定地址,譬如`@router('login')`
* 在其上一层路由,譬如`src/pages/index`中,导入并使用该路由
```
/**
* Created by tdzl2003 on 6/28/16.
*/
import Splash from './Splash';
import Home from './Home';
import * as User from './user'; // 添加这一行,引入子路由
export const routeConfig = {
path: '/',
childRoutes: [
Splash,
Home,
User, // 添加这一行,使用子路由
].map(v => v.routeConfig || v),
};
```
* 最后访问login页面时,地址是包含了每一级路由的,如`location: '/user/login'`.
## 逻辑模块
* 较复杂的大量业务,应封装为逻辑模块. starter-kit已经包含了一个逻辑模块rpc
* 逻辑模块可以import另一个逻辑模块, 但应避免循环引用.当出现循环引用时,合并两个模块,或者改变模块的额划分
* 逻辑模块可以通过export default导出一个EventEmitter,其余内容均通过export导出
* 可以在模块内部用类似以下方式,定义局部的emit函数供模块内部使用,但不应导出:
```javascript
const RPC = new EventEmitter();
const emit = RPC.emit.bind(RPC); // 可以在本模块后续代码中调用emit('事件名', 参数)
export default RPC;
```
* 导出函数可以是普通函数(直接存取内存数据)或异步函数(涉及IO或网络请求等)
* 如果有两个路由上不相干的组件需要监听相同的数据或互相通知,应建立逻辑模块,通过事件通知来通知页面刷新
## 事件订阅
* 组件可以订阅一个或多个事件.
* 在render中使用Subscribe组件来订阅事件,如下:
```javascript
render(){
return (