一些备忘
1 - 回调函数,接收的参数排在原来回调传递的参数前面 (组件的callback传的参数,排在内部传的参数之前)。
2 - cookie是服务器设置的。如果服务器设置了cookie,浏览器会把返回来的cookie存在本地。
在同源的页面里,浏览器会自动带上本地有的cookie在发送请求的时候一同发送到服务器。
如果是跨域的页面,前端需要设置http中的Access-Control-Allow-Credentials为true
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)到这里应该是都生效了,但如果还没有生效的话,去控制台里的输出看一下是否有错误日志,按照错误日志的提示解决问题