高级前端工程师,喜欢写一些总结和例子
1、原因 ssr 会在后端执行组件的 componentWillMount 以及在它这个生命周期之前的生命周期 也就是说 ssr 阶段是不会执行 componentDidMount 方法的 当你在 componentWillMount 之前当生命周期里面调用 window / localstorage 全局对象的时候, 它其实是在服务器上面执行等,因为 window / localstorage 是浏览器的属性对象。
我的博客即将入驻“云栖社区”,诚邀技术同仁一同入驻。
1、介绍 随着组件开发大流行,现在三大框架已经基本占领了整个前端。 这时候,我们要是引入一个 jq 是不是先得你的项目非常臃肿,jq 也很不适合。 这个时候,你就需要来增加你 js 的功底。
// 旋转角度 function getAngle(cen, first, second) { // cen : 中心点 [0,0] // first : 开始点 [1,3] // second : 结束位置 [3,4] var ...
1、为什么会报错 ? 这里抱着错误是因为 babel 的版本冲突。 多是因为你的 babel 依赖包不兼容。 可以查看你的 package.json 的依赖列表 即有 babel 7.
Babel 官方介绍:将 ECMAScript 2015 及其版本以后的 javascript 代码转为旧版本浏览器或者是环境中向后兼容版本的 javascript 代码。 简而言之,就是把不兼容的 JavaScript 代码转为可兼容,可以执行的 JavaScript 代码。
1、为什么要实现数据 mock 要理解为什么要实现数据 mock,我们可以提供几个场景来解释, 1、现在的开发很多都是前后端分离的模式,前后端的工作是不同的,当我们前端界面已经完成,但是后端的接口迟迟不能提供 前端很多时候都会等接口。
1、介绍 fetch 提供了一个获取资源的接口 (包括跨域)。 fetch 的核心主要包括:Request , Response , Header , Body 利用了请求的异步特性 --- 它是基于 promise 的 2、用法 var request = new Request('/users.
一命令停止某一个端口号,再也不怕端口号被占用了.. 1、插件背景 开启项目的时候,跑不起来了? 很多时候的原因就是,依赖版本,依赖的包未安装,再就是端口号被占用 例如: 这时候,我们做法就是: 1、到命令行去找到端口对应到进程号,然后停止这个进程 2、然后就是打开进程监控,在监控中找到对应端口的应用,关闭它。
1、什么是 SSR SSR 是 server side render 的缩写,从字面上就可以理解 在服务器端渲染,那渲染什么呢,很显然渲染现在框架中的前后端分离所创建的虚拟 DOM 2、为什么要实现服务器端渲染 传统的 SPA 应用 (如 react ),存在不利于优化,首屏加载慢等。
使用 npm install xl_copy // 项目中安装 import clipboard form 'xl_copy' // 引用 element.onclick = ()=>{ clipboard('test') // 复制 test } 1、介绍 利用原生...
1、transform 会为当前元素添加 position : relative 特性; 当 magin 为负值的时候,就会覆盖到前面的 元素, 然而如果给前面元素添加了transform 属性后,前面的元素就会在上面 2、transform 会限制 position:flxed 当一个元素 有 postion :flxed 属性当时候,应该是相对于文档定位 然而,当父元素中有 transform 属性的时候,该元素的 postion:flxed 属性就会变成 absolute 。
1、-webkit-mask 概属性可以给一个元素添加蒙层,蒙层可以是一个渐变或者半透明的png图片,这张png图片的 alpha 为 0 的位置会不显示元素这部分,alpha 为 1 的位置会显示元素这部分。
import axios from 'axios' export default { name: 'upload', props:['url'], data() { retur...
源码
1.闭包:函数内部的函数 2.优点: 1.隔离作用域,防止污染全局 2.有自己的独立变量 3.缓存 3.缺点 1.不容易垃圾回收 2.消耗内存 4.原型 : 1.函数有一个prototype对象,可以通过函数的原型对象来实现继承 2.原型prototype对象上有一个constructor属性。
1.js的基本类型有哪些?引用类型有哪些?null和undefined的区别。 基础类型:number,null,regex,string,boolean 引用类型 : object,function,array null是数据类型,undefined未定义 2.
1.定义: 把一个接受多个参数的函数变成一个以原函数首参数为参数并且返回一个函数来参数其他参数。 简单就是把一个含有多个参数的函数,变成分步来完成传参来并且返回函数的函数 2.例子://将多个参数的函数转为单一参数的函数 function fn(a,b,c){ return a+...
(function (window,document) { document.querySelector('input[type="text"]').addEventListener('focus',function (e) { setTimeout(function () { var docHeight = window.
window.ajaxJsonp=function(params) { params = params || {}; params.data = params.data || {}; var json = params.
1. 数组的解构赋值 从数组中获得变量的值,给对应的声明变量赋值,,有次序和对应位置赋值 解构赋值的时候右边必须可以遍历 解构赋值可以使用默认值 惰性求值,当赋值时候为undefined时候,默认是个函数就会执行函数 2.
1、声明变量的方法 es5 : var function es6 : var function let const class 2、let(const)与var 不同 let不能变量提升 let不能多次声明统一变量 let不能声明在window...
React.createElement class Welcome extends React.Component { constructor(){ super() this.state={ test:1} } render() { return Hello, {this.
//FiberNode{ alternate : '通过该属性和后面的切片进行比较', child : '改切片的子切片', firstEffect : '当前要加入的切片', stateNode : '当前切片的基本信息' } // Fiber对象 ...
0. 浏览器读取选择器是从右向左依次选择 div.test p a.son{} 1.选择所有的a.son 返回结果列表 2.检查结果列表中父元素是否有p,返回结果列表 3.返回结果列表中是否有div.
function UrlOption(url) { this.url = url || ''; this.init(); this.change = function (url) { this.
function Parent() { this.data={a1:'a1'} this.show=function () { console.
var list = [25,15,60,24,30,70,10,9,8]; //冒泡排序 function bubble(list) { var len = list.
function Node(data,left,right) { this.left=left this.right=right this.
GetUserMedia实例 #test {height: 60px;width: 40px;margin: 0 0 0 150px;overflow: hidden;background-color: #32db64;position:...
Title body { display: flex; /* 使用Flex布局 */ justify-content: center; /* 水平居中 */ } .
1.属性 navigator.onLine 在线返回true/离线返回false 2.事件 //在线回调函数 window.addEventListener('online', function(e){console.
//父类 function Person(){ this.money=1000 } 1.原型链继承 function Sam(){} Sam.prototype = new Person(); Sam.
1.apply/call函数:会改变this关键字,并且第一个参数作为this关键字。 /*apply与call区别*/ console.log(Array.prototype.join.call(['Hello', 'world'], ' ')); //接受一列参数 console.log(Math.max.apply(null, [1,2,3])); //接受一个数组参数 2.bing:会改变this关键字,并且第一个参数作为this关键字。
1.缓存分类:服务器缓存(协商缓存),第三方缓存,浏览器缓存(强制缓存) 2.浏览器缓存(添加 meta),设置请求指定的http头部信息。(状态码200,from cache , from dist) 2.服务器缓存 (状态码 304 ) 3.http头部属性 Expires:设置缓存时间(某一个时间点),时间过了就重新发送请求 Cache-Control(缓存控制): Cache-Control会覆盖Expires Max-age=s (请求:当同一个请求再s秒内不会再去取发送请求,直接取缓存。
.box{height: 200px;width: 200px;border-radius: 100%; overflow: hidden; margin: 200px; position: relative; } .
function Stack(type) { function QueueConst() {} QueueConst.execute_ing=[], QueueConst.
function Queue(type) { //type 是否是一个接着一个执行 function QueueConst() {} QueueConst.execute_ing=[], QueueConst.
1.先得到 class (获取类) Class1 = Class.forName('name') Class2 = name.class Class3 = object.getClass() 2.
github: https://github.com/longfei59418888/vui (记得给一个 start,以后有一起讨论,各种好组件) demo : http://60.205.209.185/#/popup
github: https://github.com/longfei59418888/vui (记得给一个 start,以后有一起讨论,各种好组件) demo : http://60.205.209.185/#/time
//时间格式化 Date.prototype.format = function(fmt) { var o = { "M+": this.getMonth() + 1, //月份 "d+": this.
class Event{ constructor(){ this.handlers=[] } on(type,fn){ //订阅事件 if(!this.
function getVendorPrefix() { var body = document.body || document.documentElement, style=body.
const _ARRAY_NAME = "[object Array]" const _OBJECT_NAME = "[object Object]" //扩展 export function extend(target) { var targets, arg = Array.
function isEmptyObject(e){ //是否是空对象 var t; for(var t in e){ retrun false; } retrun true; }
test document.getElementById('box').addEventListener('click',function () { console.