<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[cloudgaps的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/cloudgaps</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; cloudgaps]]></copyright><item><title><![CDATA[Redux]]></title><link>https://blog.youkuaiyun.com/cloudgaps/article/details/118057903</link><guid>https://blog.youkuaiyun.com/cloudgaps/article/details/118057903</guid><author>cloudgaps</author><pubDate>Mon, 26 Jul 2021 14:43:39 +0800</pubDate><description><![CDATA[1.单一数据源

所有的state都放在一个状态管理器中进行管理。

2.state是只读的

唯一改变state的办法就是action,action是一个描述已发生事件的
]]></description><category></category></item><item><title><![CDATA[axios文件上传进度]]></title><link>https://blog.youkuaiyun.com/cloudgaps/article/details/118364482</link><guid>https://blog.youkuaiyun.com/cloudgaps/article/details/118364482</guid><author>cloudgaps</author><pubDate>Wed, 30 Jun 2021 16:39:43 +0800</pubDate><description><![CDATA[let config = {
          onUploadProgress: progressEvent =&gt; {
            let complete = (progressEvent.loaded / progressEvent.total).toFixed(2) * 100
            console.log(complete)
            this.percentage = complete
            if (complete &...]]></description><category></category></item><item><title><![CDATA[js时间差计算]]></title><link>https://blog.youkuaiyun.com/cloudgaps/article/details/118338669</link><guid>https://blog.youkuaiyun.com/cloudgaps/article/details/118338669</guid><author>cloudgaps</author><pubDate>Tue, 29 Jun 2021 16:41:27 +0800</pubDate><description><![CDATA[vargetPlanTime="2021-07-30"

varplanTime=newDate(getPlanTime.replace(/-/g,'/')).getTime()

varnowTime=newDate().getTime()



varoutTime=planTime-nowTime

vardays=parseInt(outTime/(1000*60*60*24))
]]></description><category></category></item><item><title><![CDATA[Vue后台管理项目权限处理思路]]></title><link>https://blog.youkuaiyun.com/cloudgaps/article/details/118150112</link><guid>https://blog.youkuaiyun.com/cloudgaps/article/details/118150112</guid><author>cloudgaps</author><pubDate>Wed, 23 Jun 2021 12:42:41 +0800</pubDate><description><![CDATA[1.不同角色权限的菜单栏渲染思路

]]></description><category></category></item><item><title><![CDATA[egg.js后台流程记录2]]></title><link>https://blog.youkuaiyun.com/cloudgaps/article/details/118093853</link><guid>https://blog.youkuaiyun.com/cloudgaps/article/details/118093853</guid><author>cloudgaps</author><pubDate>Mon, 21 Jun 2021 20:35:42 +0800</pubDate><description><![CDATA[1.安装数据库

npm i --save egg-sequelize mysql2

配置数据库


'use strict';

/** @type Egg.EggPlugin */
module.exports = {
  // had enabled by egg
  // static: {
  //   enable: true,
  // }
  cors: {
    enable: true,
    package: 'egg-cors',
  },
  sequelize: {
   ]]></description><category></category></item><item><title><![CDATA[egg.js后台流程记录1]]></title><link>https://blog.youkuaiyun.com/cloudgaps/article/details/118093245</link><guid>https://blog.youkuaiyun.com/cloudgaps/article/details/118093245</guid><author>cloudgaps</author><pubDate>Mon, 21 Jun 2021 20:03:43 +0800</pubDate><description><![CDATA[1.路由传参

 url中通过https:..../id的方式传递的数据可以在控制器中通过this.ctx.params.id获取，

 通过?name=ls的方式传递的数据则是通过this.ctx.query.name获取，

 通过this.ctx.status可以修改返回的状态码。

2.关闭crsf开启跨域

1.安装 npm i egg-cors --save生产依赖。

2.在confug/plugin.js中配置插件


'use strict';

/** @type Egg.Egg...]]></description><category></category></item><item><title><![CDATA[vue双向数据绑定原理3]]></title><link>https://blog.youkuaiyun.com/cloudgaps/article/details/117988163</link><guid>https://blog.youkuaiyun.com/cloudgaps/article/details/117988163</guid><author>cloudgaps</author><pubDate>Thu, 17 Jun 2021 13:17:29 +0800</pubDate><description><![CDATA[接上文， 我们现在为所有数据增加了setter和getter，为vue实例对象配置了数据代理，

但我们还不能拿到页面上的dom元素，所以内部还需要一个编译模板的函数，
]]></description><category></category></item><item><title><![CDATA[vue双向数据绑定原理2-前置知识点defineProperty]]></title><link>https://blog.youkuaiyun.com/cloudgaps/article/details/117968592</link><guid>https://blog.youkuaiyun.com/cloudgaps/article/details/117968592</guid><author>cloudgaps</author><pubDate>Thu, 17 Jun 2021 02:04:22 +0800</pubDate><description><![CDATA[1.Object.defineProperty

 基本使用方法：


const obj = {
  name: 'cloudgaps',
  age: '18',
  info: {
    a:'1',
    b:'2'
  }
}

Object.defineProperty(obj,'name',{
  enumerable:true, //当前属性允许被循环 枚举
  configurable:true,  //当前属性允许被配置 删除
  get(){},  //取值拦截
  set(){.]]></description><category></category></item><item><title><![CDATA[vue双向数据绑定原理1--前置知识点reduce、发布订阅模式]]></title><link>https://blog.youkuaiyun.com/cloudgaps/article/details/117493351</link><guid>https://blog.youkuaiyun.com/cloudgaps/article/details/117493351</guid><author>cloudgaps</author><pubDate>Wed, 16 Jun 2021 21:45:44 +0800</pubDate><description><![CDATA[命令行输入 tsc --init 将会在目录下创建tsconfig.js的配置文件
]]></description><category></category></item><item><title><![CDATA[云E办思路回顾]]></title><link>https://blog.youkuaiyun.com/cloudgaps/article/details/117954996</link><guid>https://blog.youkuaiyun.com/cloudgaps/article/details/117954996</guid><author>cloudgaps</author><pubDate>Wed, 16 Jun 2021 14:57:59 +0800</pubDate><description><![CDATA[1.vue/cli创建项目。

2.使用eslint、prettierrc格式化语法。

3.写login页面，用element的form表单，注form表单的验证规则对应应该是和m
]]></description><category></category></item><item><title><![CDATA[vue eslint prettierrc简单配置]]></title><link>https://blog.youkuaiyun.com/cloudgaps/article/details/117530264</link><guid>https://blog.youkuaiyun.com/cloudgaps/article/details/117530264</guid><author>cloudgaps</author><pubDate>Tue, 15 Jun 2021 18:27:22 +0800</pubDate><description><![CDATA[{
  "compilerOptions": {
    /* Visit https://aka.ms/tsconfig.json to read more about this file */

    /* Basic Options */
    // "incremental": true,                         /* Enable incremental compilation */
    "target": "es5",                      .]]></description><category></category></item><item><title><![CDATA[2021-06-10 React项目笔记]]></title><link>https://blog.youkuaiyun.com/cloudgaps/article/details/117793128</link><guid>https://blog.youkuaiyun.com/cloudgaps/article/details/117793128</guid><author>cloudgaps</author><pubDate>Thu, 10 Jun 2021 23:06:37 +0800</pubDate><description><![CDATA[TS泛型的使用及如果请求接口不时REST API，如何使用json-server自定义请求


import React, { FormEvent } from 'react'

const apiUrl = process.env.REACT_APP_API_URL


export const LoginScreen = () =&gt; {
    // 定义login函数
    const login =(param:{username:string,password:string}) =&gt;]]></description><category></category></item><item><title><![CDATA[用Custom Hook提取并复用组件代码]]></title><link>https://blog.youkuaiyun.com/cloudgaps/article/details/117784688</link><guid>https://blog.youkuaiyun.com/cloudgaps/article/details/117784688</guid><author>cloudgaps</author><pubDate>Thu, 10 Jun 2021 17:40:20 +0800</pubDate><description><![CDATA[1.封装use'E'f'fe


// 复用useEffect
export const useMount = (callback) =&gt; {
    useEffect(() =&gt; {
      callback()
    },[])
}


]]></description><category></category></item><item><title><![CDATA[React项目学习笔记2]]></title><link>https://blog.youkuaiyun.com/cloudgaps/article/details/117756958</link><guid>https://blog.youkuaiyun.com/cloudgaps/article/details/117756958</guid><author>cloudgaps</author><pubDate>Thu, 10 Jun 2021 00:00:43 +0800</pubDate><description><![CDATA[import { useState, useEffect } from "react"

export const SearchPanle = () =&gt; {
    // input
    const [param, setParam] = useState({
        name: '',
        personId: ''
    })
    // select
    const [users, setUsers] = useState([])
    // list
   .]]></description><category></category></item><item><title><![CDATA[React项目笔记1-json-server的配置]]></title><link>https://blog.youkuaiyun.com/cloudgaps/article/details/117756298</link><guid>https://blog.youkuaiyun.com/cloudgaps/article/details/117756298</guid><author>cloudgaps</author><pubDate>Wed, 09 Jun 2021 23:07:27 +0800</pubDate><description><![CDATA[1.使用配置简单的json-server来模拟数据的增删改查.

 安装一开


 yarn add json-server -D


]]></description><category></category></item><item><title><![CDATA[es7、es8新增语法概述]]></title><link>https://blog.youkuaiyun.com/cloudgaps/article/details/117713244</link><guid>https://blog.youkuaiyun.com/cloudgaps/article/details/117713244</guid><author>cloudgaps</author><pubDate>Tue, 08 Jun 2021 19:17:18 +0800</pubDate><description><![CDATA[1.includes方法

 以前我们使用indexof来找到指定元素的下标，但indexof无法找到NaN，includes
]]></description><category></category></item><item><title><![CDATA[es6学习笔记4-iterator迭代接口、for...of循环、Generator函数]]></title><link>https://blog.youkuaiyun.com/cloudgaps/article/details/117711439</link><guid>https://blog.youkuaiyun.com/cloudgaps/article/details/117711439</guid><author>cloudgaps</author><pubDate>Tue, 08 Jun 2021 18:45:04 +0800</pubDate><description><![CDATA[1.es6提供了一种统一的接口机制，以便于遍历不同的数据结构，原有的数组和对象都内置了这个接口，在其原型对象__proto__上即可看到Symbol.iterator，而ES6新增的数据jie
]]></description><category></category></item><item><title><![CDATA[es6学习笔记3-Reflect、static、Set、Map、Symbol]]></title><link>https://blog.youkuaiyun.com/cloudgaps/article/details/117704366</link><guid>https://blog.youkuaiyun.com/cloudgaps/article/details/117704366</guid><author>cloudgaps</author><pubDate>Tue, 08 Jun 2021 16:03:27 +0800</pubDate><description><![CDATA[1.Reflect

 一个静态对象，类似于Math，提供了一系列操作对象的方法，实际上是Proxy内部方法的默认实现，以前操作对象的方法不统一，Reflect
]]></description><category></category></item><item><title><![CDATA[vue路由传参总结]]></title><link>https://blog.youkuaiyun.com/cloudgaps/article/details/117676835</link><guid>https://blog.youkuaiyun.com/cloudgaps/article/details/117676835</guid><author>cloudgaps</author><pubDate>Mon, 07 Jun 2021 23:43:04 +0800</pubDate><description><![CDATA[一.Vue路由传参

1.route-link路由导航

 在to跳转链接后传递参数，获取时需要在路由配置path时注明，con
]]></description><category></category></item><item><title><![CDATA[es6学习笔记2箭头函数、对象字面量、Proxy]]></title><link>https://blog.youkuaiyun.com/cloudgaps/article/details/117675876</link><guid>https://blog.youkuaiyun.com/cloudgaps/article/details/117675876</guid><author>cloudgaps</author><pubDate>Mon, 07 Jun 2021 22:51:34 +0800</pubDate><description><![CDATA[1.箭头函数注意点：

this指向问题，常规函数this指向其调用者，而箭头函数不指向其调用者，而是定义该函数当前作用域里面的this，应用场景，解决闭包时拿不到外层对象的情况
]]></description><category></category></item></channel></rss>