一些备忘

1 - 回调函数,接收的参数排在原来回调传递的参数前面 (组件的callback传的参数,排在内部传的参数之前)。

2 - cookie是服务器设置的。如果服务器设置了cookie,浏览器会把返回来的cookie存在本地。

在同源的页面里,浏览器会自动带上本地有的cookie在发送请求的时候一同发送到服务器。

如果是跨域的页面,前端需要设置http中的Access-Control-Allow-Credentialstrue

3 - React里有两种组件,一种叫无状态组件,就是一个返回一个JSX element的函数,只能接受来自父组件的props,没有this;

另外一种是有状态组件,就是在React.Component上的拓展类,应用react的各种生命周期函数和state,就是常用的那种组件。

4 - React中的高阶组件(higher-order conponent),就是函数中传入一个组件,然后返回一个新的组件。

有好几种实现方式。

1)组合:就是传入一个组件后,透传props,然后在返回一个新的组件。新组件跟原组件没有任何关系,是两个独立的组件。所以新组件也不会带上原组件的任何state,如果需要将state传递,需要通过props传递

2)继承:传入一个组件后,在传入的组件上做扩展,返回一个新的组件,新组件是原组件的子类,他们之间是父子关系。所以新组件继承原组件的方法和状态,也就是state是可以直接在新组件里访问到。只要HOC存在,他们就一直存在继承关系,如果移除了HOC,他们的之间的继承就中断了,还是两个独立的组件

5 - 装饰器。装饰器只能用在类和类属性上。es6的装饰器就是@name,带@的就是装饰器。

**装饰器跟react的高阶组件没有任何关系,高阶组件可以通过装饰器的方式引入。

6 - React中的Render Props,就是在组件中的props接受一个函数,这个函数返回一个react元素(JSX)并且调用它。

7 - 防抖(debounce):所谓防抖,就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间。]

(适用于页面滚动触发的事件,连续滚动多次,在最后一次结束时再触发)

 1 function debounce (fn, delay) {
 2   let timer;
 3   return function () {
 4     console.log('timer', timer);
 5     const _this = this;
 6     const args = arguments;
 7 
 8     if (timer) {
 9       clearTimeout(timer);
10     }
11     timer = setTimeout(function () {
12       fn.apply(_this, args);
13       timer = null;
14     }, delay);
15   };
16 }

 

 

8 - 节流(throttle):所谓节流,就是指连续触发事件但是在 n 秒中只执行一次函数。节流会稀释函数的执行频率。

(适用于模糊查询,连续对输入字符进行修改,在固定的时间间隔内触发查询)

 

1 function throttle(fn, wait) {
2     let startTime = Date.now()
3     return function () {
4         if (Date.now() - startTime >= wait) {
5             fn.apply(this, arguments)
6         }
7     }
8 }

 

 注意:clearTimeout清除的是定时器的内容,并不是清除赋予定时器变量,定时器的变量仍然是有值并存在的。

9 - js如何触发css的过渡动画,通过改变css的属性即可。

10 - AMD(Asynchronous Module Definition) 异步模块定义 define(id, dependencies, factory), id-模块名,dependencies-依赖(数组),factory-实例化函数或对象,通过require引入模块。依赖前置,异步定义,延迟执行。具体实现Required.js

11 - CMD(Common Module Definition) 通用模块定义,define(function(require, exports, module) { ...}) 就近依赖,按需引入。具体实现sea.js

12 - import和require的区别。import是编译的时调用,是解构过程;require是运行时调用,是赋值过程。

13 - 正向代理隐藏真实客户端,反向代理隐藏真实服务端

14 - 可以获取scrollTop的元素,是被滚动元素的父元素。比如body滚动,可以测量到scrollTop的元素是documentElement(存疑,待验证)

15 - 宏任务 macroTask 微任务microTask

16 - react的文件里,如果在文件里用了import (sample.js),就说明被引入的js文件是当做一个模块进行引入的。所以在这里(sample.js)是一个单独的作用域,因此sample里的变量并不是全局变量,无法在该文件里使用。

如果想在引入的文件里使用sample里的变量,需要在sample里将对应的变量导出(export)

17 - eslint是用来校验代码的质量的、提示问题和报错,prettier是用来格式化代码,但是不对代码质量进行校验

18 - 如果要在vscode用使用eslint和prettier

1)要安装eslint, prettier, prettier-eslint

2)项目里有要.eslintrc, .prettierrc,并且正确配置校验规则和格式化规则

3)vscode的setting.json里要设置好对应代码的格式化规则

比如以下规则,注意defaultFormatter这个配置项的值是否是想要的格式化方案

"[vue]": {
        "editor.defaultFormatter": "octref.vetur"
    },
 "[javascript]": {
        "editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
    },

4)到这里应该是都生效了,但如果还没有生效的话,去控制台里的输出看一下是否有错误日志,按照错误日志的提示解决问题

 

posted @ 2019-09-23 14:48  yupire  阅读(97)  评论(0编辑  收藏  举报