文档服务地址:http://47.92.0.57:3000/ 周报索引地址:http://47.92.0.57:3000/s/NruNXRYmV

Commit 079391c5 by 安博

first

parent 36fbc930
...@@ -59,24 +59,24 @@ Npm瘛 ...@@ -59,24 +59,24 @@ Npm瘛
在该框架中,执行的基本逻辑如下: 在该框架中,执行的基本逻辑如下:
1. 先搭建路由,src/common下有menu和router两个文件,先在menu里写入预备在slider里边展示的路径,然后在router里进行配置,将路由和文件的路径相匹配,并连接该页面的model(models文件夹下的文件,页面需要的) 1. 先搭建路由,`src/common`下有menu和router两个文件,先在menu里写入预备在slider里边展示的路径,然后在router里进行配置,将路由和文件的路径相匹配,并连接该页面的model(models文件夹下的文件,页面需要的)
2. 在src/routes对应路径里的页面 2. `src/routes`对应路径里的页面
3. 在src/components下写各页面公共组件。 3. `src/components`下写各页面公共组件。
4. 在src/models中建立页面所需model,最好名称对应,该文件用来连接页面和services,主要内容是action(该页面调用了service的func) 4. `src/models`中建立页面所需model,最好名称对应,该文件用来连接页面和services,主要内容是action(该页面调用了service的func)
5. 在src/services/api中配置页面进行前后台数据请求的路径并调用src/utils/request文件中fetch方法向后台发送请求 5. `src/services/api`中配置页面进行前后台数据请求的路径并调用src/utils/request文件中fetch方法向后台发送请求
6. roadhogrc.mock.js用于配置请求的url使前后台链接起来 6. `roadhogrc.mock.js`用于配置请求的url使前后台链接起来
![图片](media/73de7ae8d602858b05ca312d9c267f70.png) ![图片](media/73de7ae8d602858b05ca312d9c267f70.png)
1.2          路由和菜单 1.2          路由和菜单
----------------------- -----------------------
路由的配置文件统一由src/common/router.js文件进行管理。const对象routerConfig中定义了最顶层的路由配置。以根目录的路由配置为例: 路由的配置文件统一由`src/common/router.js`文件进行管理。const对象`routerConfig`中定义了最顶层的路由配置。以根目录的路由配置为例:
``` ```
/** /**
...@@ -86,9 +86,9 @@ Npm瘛 ...@@ -86,9 +86,9 @@ Npm瘛
'/':{compoent:dynamicWrapper(app,[],()=>import('../layouts/BasicLayout')} '/':{compoent:dynamicWrapper(app,[],()=>import('../layouts/BasicLayout')}
``` ```
每个配置项是一组键值对,键是要路由到的路径,值是一个component组件,由函数dynamicWrappe生成,其传入的参数包括:工程上下文对象app(可省略);一个数组,包含要用到的model(可为空);要渲染的component(可以加载layout或者routes目录下的.js) 每个配置项是一组键值对,键是要路由到的路径,值是一个`component`组件,由函数`dynamicWrappe`生成,其传入的参数包括:工程上下文对象app(可省略);一个数组,包含要用到的model(可为空);要渲染的component(可以加载layout或者routes目录下的.js)
src/common/menu.js文件是导航栏记录。menuData对象是一个纯json,描述了菜单的层级结构和描述属性,包括名称、图标、路径、权限等。如下是一个带有子目录的配置。在menu.js代码末尾对该json文件进行读取和解析,封装成routeData。 `src/common/menu.js`文件是导航栏记录。`menuData`对象是一个纯json,描述了菜单的层级结构和描述属性,包括名称、图标、路径、权限等。如下是一个带有子目录的配置。在menu.js代码末尾对该json文件进行读取和解析,封装成`routeData`
``` ```
/** /**
...@@ -195,7 +195,7 @@ effectModel蝏鈭窈瘙嚗 ...@@ -195,7 +195,7 @@ effectModel蝏鈭窈瘙嚗
1.4          如何在组件渲染中使用Model 1.4          如何在组件渲染中使用Model
-------------------------------------- --------------------------------------
先上示例代码。play.js即1.2节中路由指向的脚本,在这里完成对应路由的页面渲染。 先上示例代码。`play.js`即1.2节中路由指向的脚本,在这里完成对应路由的页面渲染。
``` ```
/** /**
* routes/play/play.js * routes/play/play.js
...@@ -246,7 +246,7 @@ export default class play extends Component { ...@@ -246,7 +246,7 @@ export default class play extends Component {
``` ```
### 1.4.1          连接Model ### 1.4.1          连接Model
通过@connect注解(本质上是装饰器)链接model,链接的model和对应的字段、方法可以保存到组件里的上下文中。 通过`@connect`注解(本质上是装饰器)链接model,链接的model和对应的字段、方法可以保存到组件里的上下文中。
``` ```
/** /**
*通过注解形式链接model,每个链接的model都会被保存到组件上下文中 *通过注解形式链接model,每个链接的model都会被保存到组件上下文中
...@@ -270,7 +270,7 @@ return (<div>{data.time} ...@@ -270,7 +270,7 @@ return (<div>{data.time}
### 1.5.1        service ### 1.5.1        service
注意到我们在model/play.js里第一行引入了services/API中的内容。这个文件的部分内容如下。 注意到我们在`model/play.js`里第一行引入了`services/API`中的内容。这个文件的部分内容如下。
``` ```
/** /**
*services/API.js *services/API.js
...@@ -329,7 +329,7 @@ export async function play() ...@@ -329,7 +329,7 @@ export async function play()
return request('/api/play'); return request('/api/play');
} }
``` ```
可以看到,我们引入的play就是最后的这个方法,它返回了一个对/api/play的请求。这个文件用于组织我们的API,几种请求的写法在上述代码中有示例。 可以看到,我们引入的play就是最后的这个方法,它返回了一个对`/api/play`的请求。这个文件用于组织我们的API,几种请求的写法在上述代码中有示例。
可以把API拆分成不同的文件,放在services目录下。 可以把API拆分成不同的文件,放在services目录下。
...@@ -384,7 +384,7 @@ const proxy = { ...@@ -384,7 +384,7 @@ const proxy = {
export default (noProxy ? {} : delay(proxy, 0)); export default (noProxy ? {} : delay(proxy, 0));
``` ```
`.roadhogrc.mock.js`位于项目根目录下,负责代理全局请求。它的proxy对象保存了API和代理内容的键值对。其中,API可以使用通配符,代理内容格式可以是数组、对象、字符串、方法这几种。 `.roadhogrc.mock.js`位于项目根目录下,负责代理全局请求。它的`proxy`对象保存了API和代理内容的键值对。其中,API可以使用通配符,代理内容格式可以是数组、对象、字符串、方法这几种。
| 格式 | 意义 | | 格式 | 意义 |
|--------|---------------------------------------------------------------------------------------------------------| |--------|---------------------------------------------------------------------------------------------------------|
...@@ -392,8 +392,7 @@ export default (noProxy ? {} : delay(proxy, 0)); ...@@ -392,8 +392,7 @@ export default (noProxy ? {} : delay(proxy, 0));
| 对象 | 同数组 | | 对象 | 同数组 |
| 字符串 | 如果是http或者https开头的有效URL,则重定向至对应的域名(用于真实后台接入),否则和数组/对象处理方式一样 | | 字符串 | 如果是http或者https开头的有效URL,则重定向至对应的域名(用于真实后台接入),否则和数组/对象处理方式一样 |
| 方法 | 默认传入req和res对象,可自定义返回内容 | | 方法 | 默认传入req和res对象,可自定义返回内容 |
最后的`(noProxy ? {} : delay(proxy, 最后的`(noProxy ? {} : delay(proxy,0))`表示如果工程启动命令指定了no-proxy,则不执行代理,否则执行一个可选延迟时间的代理。此处的0可替换成想要的延迟,单位毫秒。
0))`表示如果工程启动命令指定了no-proxy,则不执行代理,否则执行一个可选延迟时间的代理。此处的0可替换成想要的延迟,单位毫秒。
**事实证明,跨域请求只能在代理中完成,如果直接在API中请求会出现跨域错误。** **事实证明,跨域请求只能在代理中完成,如果直接在API中请求会出现跨域错误。**
...@@ -526,7 +525,7 @@ Java8銝剔ambda銝靽格銝葉隞撘 ...@@ -526,7 +525,7 @@ Java8銝剔ambda銝靽格銝葉隞撘
3.2          generator和yield 3.2          generator和yield
----------------------------- -----------------------------
generator即生成函数,使用 * 声明。至于为什么叫生成器可以从下面的例子来理解。 generator即生成器函数,使用 `*` 声明。至于为什么叫生成器可以从下面的例子来理解。
``` ```
*function example() *function example()
{ {
...@@ -538,13 +537,12 @@ generator嚗蝙 * 憯唳鈭蛹隞銋隞 ...@@ -538,13 +537,12 @@ generator嚗蝙 * 憯唳鈭蛹隞銋隞
可以看出,yield的存在让函数可以分步执行,还能在执行过程中进行干预,获取中间值。这个特性使得我们可以获取一个异步回调函数中的结果,而无须进入函数内部,从而避免了多个异步函数嵌套,造成“回调黑洞”现象。 可以看出,yield的存在让函数可以分步执行,还能在执行过程中进行干预,获取中间值。这个特性使得我们可以获取一个异步回调函数中的结果,而无须进入函数内部,从而避免了多个异步函数嵌套,造成“回调黑洞”现象。
*可以写在function的前面或者函数名前面,不能写在函数名末尾。 `*`可以写在function的前面或者函数名前面,不能写在函数名末尾。
3.3          export 3.3          export
------------------- -------------------
export是ES6标准中用于组织模块的关键字,被`export`的对象可以在`import`相应js文件的时候通过解构取出来。可以指定`default export是ES6标准中用于组织模块的关键字,被`export`的对象可以在`import`相应js文件的时候通过解构取出来。可以指定`default export`以作为默认导出对象。
export`以作为默认导出对象。
3.4          扩展运算符和解构 3.4          扩展运算符和解构
----------------------------- -----------------------------
...@@ -566,7 +564,7 @@ let [p1,p2,...subArray]=array; ...@@ -566,7 +564,7 @@ let [p1,p2,...subArray]=array;
console.log(p2); //p2=2 console.log(p2); //p2=2
console.log(subArray); //subArray=[3,4,5] console.log(subArray); //subArray=[3,4,5]
``` ```
解构操作支持嵌套解构,对于数组解构可以使用占位符跳过不需要的元素。 解构操作支持嵌套解构,对于数组解构可以使用占位符','跳过不需要的元素。
3.5          promise和async/await 3.5          promise和async/await
--------------------------------- ---------------------------------
...@@ -576,7 +574,7 @@ promise銝銝芰畾笆鞊∴銝芸嚗葵 ...@@ -576,7 +574,7 @@ promise銝銝芰畾笆鞊∴銝芸嚗葵
let p1=data=>new Promise((resolve,reject)=>{resolve(data)}); let p1=data=>new Promise((resolve,reject)=>{resolve(data)});
p1(1).then(p1).then(data=>console.log(data)).catch(e=>console.log(e)); p1(1).then(p1).then(data=>console.log(data)).catch(e=>console.log(e));
``` ```
resolve方法中传入的参数即为计算结果,可以大概理解为用它代替传统的return。每个promise在构造后都会立即执行,执行过程中会改变promise的状态(未完成,成功,失败)。使用then传入一个函数`(data=>{})`以提取返回的结果。如果then中传入的函数返回promise,则可以继续调用then获取这个promise的返回结果。使用`catch`捕捉整个链上的异常。 resolve方法中传入的参数即为计算结果,可以大概理解为用它代替传统的return。每个promise在构造后都会立即执行,执行过程中会改变promise的状态(未完成,成功,失败)。使用`then`传入一个函数`(data=>{})`以提取返回的结果。如果then中传入的函数返回promise,则可以继续调用then获取这个promise的返回结果。使用`catch`捕捉整个链上的异常。
对于一个涉及多个异步操作的流程,传统的写法是: 对于一个涉及多个异步操作的流程,传统的写法是:
``` ```
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment