- 博客(53)
- 收藏
- 关注
原创 vue3.0 composition api
文章目录简单demosetup参数setup生命周期响应式APIreactivereftoRefs与toRefcomputedwatch在vue2中如果新增一个功能,需要在data中添加数据,在methods或computed或watch中添加逻辑,那么数据与业务逻辑是分散的。这种碎片化使得理解和维护复杂组件变得困难。选项的分离掩盖了潜在的逻辑问题。此外,在处理单个逻辑关注点时,我们必须不断地“跳转”相关代码的选项块。如果我们能够将与同一个逻辑关注点相关的代码配置在一起会更好。而这正是组合式 API
2021-03-26 16:45:30 548
原创 基于G6的流程图绘制
最近项目中,有一个功能为流程图绘制,且需要根据当前以走到的流程在流程图中进行高亮。一开始是基于cavans进行绘制,但是由于绘制路线太多,计算点太多,最终放弃,选择基于g6重新进行了流程图绘制,该文章主要针对流程图模块,进行G6一些配置项的说明。安装: npm install --save @antv/g6引用: import G6 from '@antv/g6'简单demodata() { return { nodes: [{ id:
2021-03-22 17:42:32 2374
转载 Vue3 的新特性 —— 虚拟DOM的底层原理
本文原地址:Vue3 的新特性(二) —— Composition-ApiVdom (虚拟dom)凭借着出色的性能成为了目前的主流的前端框架都会选择的渲染方案。再加上优秀的 diff 算法对它的一步步的优化,使框架的价值得到了极致的体现,几乎成为了我们前端开发必不可少的方案。我们已经知道,Vue2.x 中的 Vdom 已经相当出色了,性能非常优秀。不过令人兴奋的是,尽管它够快,但在 Vue3 中还是对 Vdom 进行了重写,使 Vue3 突破了 Vdom 的性能瓶颈,更快!Vue3 如何重写 Vdom
2021-02-25 14:16:05 901
原创 服务端渲染基础
SPA单页应用:优点:用户体验好;开发效率高渲染性能好可维护性好缺点:首屏渲染时间长不利于SEO传统的服务端渲染客户端激活为SPA同构应用:通过服务端渲染首屏直出,解决SPA应用首屏渲染慢以及不利于SEO问题通过客户端渲染页面接管页面内容交互得到更好的用户体验这种方式通常称之为现代化的服务端渲染,也叫同构渲染。服务端渲染基础什么是渲染:把【数据】+【模板】拼接到一起{msg: 'Hello World'}<h1>{{ msg }}
2020-12-31 14:36:23 231
原创 js中的继承方式
文章目录原型链继承盗用构造函数组合继承(结合原型链和盗用构造函数)js中继承的实现主要是通过原型链实现的,下面就一起来一下实现继承的方式吧~原型链继承将父类的实例作为子类的原型实现继承 function SuperType(){ this.property = true; } SuperType.prototype.getSuperValue = function(){ console.log(this.property); } fu
2020-12-02 15:28:15 219
原创 Vue中Vnode的创建与处理
什么是虚拟DOM虚拟DOM(Virtual DOM)是使用JavaScript对象描述真实DOMVue.js中的虚拟DOM借鉴Snabbdom,并添加了Vue.js的特征,例如:指令和组件机制为什么要使用虚拟DOM:避免直接操作真实DOM,提高开发效率作为一个中间层可以跨平台,支持web端渲染,还可以支持服务端渲染虚拟DOM不一定可以提高性能:首次渲染的时候会增加开销复杂视图情况下提升渲染性能h函数vm.$createElement(atg, data, children,
2020-11-27 16:38:44 19611
原创 vue-set/delete/nextTick源码简读
Vue.set与vm.$set是向响应式对象中添加一个 property,并确保这个新 property 同样是响应式的,且触发视图更新在vue中,一般会对初始化的数据进行响应式处理
2020-11-13 17:04:05 203
原创 Vue中的响应式处理(源码解读)
文章目录响应式处理入口响应式处理入口Observer函数定义在src/core/observer/index.js中,首先,我们来看一下这个函数的源码:export function observe (value: any, asRootData: ?boolean): Observer | void { // 判断value是否是对象 if (!isObject(value) || value instanceof VNode) { // 如果不是一个对象或者是vNode的一个实
2020-11-10 18:00:38 576
原创 vue初始化——源码简读
文章目录源码目录结构Vue的构建版本完整版与运行时版本的区别template与render执行顺序Vue函数的初始化Vue静态方法初始化Vue实例成员初始化过程Vue实例成员init方法Vue实例成员initState方法源码目录结构这里主要分析src目录下文件的主要功能compiler:与编译相关core:Vue核心代码components:keep-alive相关代码global-api:Vue静态成员相关初始化instance:Vue实例相关初始化observer:响应式相关代码
2020-10-27 15:17:36 593
原创 vue-router使用
文章目录路由使用编程式导航路由参数嵌套路由hash与history模式的区别路由钩子路由使用编程式导航push,replace,go(-1)与back的效果一样路由参数props嵌套路由hash与history模式的区别hash模式,(基于锚点与ononhashchange)history模式 (基于HTML5中history Api, pushState(IE10以后才支持), replacereplaceState)history需要服务器支持,单页应用中,地址找不到会返回找不到该
2020-10-09 15:55:45 270 1
原创 TypeScript入门学习
文章目录强类型与弱类型,静态类型与动态类型Flow静态类型检查方案什么是flow?安装使用flowTypeScript语言规范与基本应用强类型与弱类型,静态类型与动态类型强类型语言: 总是强制类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了弱类型语言:与强类型定义语言相反, 弱类型的语言的东西没有明显的类型,他能随着环境的不同,自动变换类型一般来说:强类型偏向于不容忍隐式类型转换
2020-09-29 17:48:50 255
原创 JS的异步编程
文章目录同步与异步模式事件循环与消息队列异步编程的几种方式Promise的异步方案,宏任务/微任务Generator异步方案Async/Await语法糖同步与异步模式事件循环与消息队列异步编程的几种方式Promise的异步方案,宏任务/微任务Generator异步方案Async/Await语法糖...
2020-09-27 11:18:20 422
原创 ES6常见新特性总结
文章目录Object.assginObject.isproxyReflectpromiseclassObject.assgin【ES6学习笔记之】Object.assign()用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。使用方法:Object.assign(target, ...sources)使用场景:对象合并,为属性指定默认值,以下是为属性指定默认值的一个democonst DEFAULTS = { logLevel: 0, outputForma
2020-09-18 15:32:38 348
转载 js使用filter递归过滤树形结构数组
对树结构的数组进行数据过滤还是很常见的一种数据处理,这里进行一下记录以便以后使用// 菜单列表const menuList = [{ name: '系统管理', code: 'system_manage', children: [{ name: '用户管理', code: 'user_manage', children: [{ name: '添加用户', code: 'add_user
2020-09-16 14:48:13 3482 1
原创 Vue中实现父子组件双向数据传递的方式
文章目录双向数据传递v-mode双向数据传递这里提到的父子组件双向数据传递,即父子组件可以进行互相修改我们知道一般父向子传值,子通过props进行接收,子向父传值,是通过$emit发布一个事件,父通过事件的监听获取到子的值,详细可见vue-组件之间的通信这里我们通过v-model,model及sync来实现父子双向的数据传递v-mode在vue中的一些表单中,我们经常通过v-mode来实现数据的双向绑定,但其实v-model的本质是一个语法糖,如下代码<input v-model="
2020-09-05 09:49:29 1093
原创 基于elementUI的分页表格组件封装
在后台管理系统中,会经常大量的使用表格与分页,以下基于elementUI实现一个简单的table与pagination的封装这里在pageSize发生变化的时候,会令currentPage为1,即表格跳转到第一页,这里这么做的目的在于:例如当前页为10,当修改pageSize后,由于每页数据量变大,此时最大页数如果小于10,那么会再次触发current-change事件的发生,对到项目中,一般是会进行两次请求,因此这里直接跳转到第一页,那么由于是第1页,就不会触发current-change事件的发生
2020-09-03 17:50:05 1620
原创 vue中mixins、extends、extend使用及区别
文章目录mixinsmixinsmixins:选项接收一个混入对象的数组。这些混入对象可以像正常的实例对象一样包含实例选项,这些选项将会被合并到最终的选项中应用场景:在项目中,如果我们需要提取公用的数据或者通用的方法,并且这些数据与方法不需要组件间进行维护,就可以使用mixins...
2020-08-10 11:02:44 5339
原创 vue-cli3.0搭建服务端渲染SSR
文章目录关于SSR什么是SSR为什么要用SSRSSR原理通用代码约束:构建SSR应用程序创建vue项目修改router/index.js修改store/index.js修改main.js服务端数据预取客户端数据预取构建配置webpack进行打包操作创建服务关于SSR什么是SSR可以将同一个组件渲染为服务器端的 HTML 字符串,将它们直接发送到浏览器,最后将这些静态标记"激活"为客户端上完全可交互的应用程序简单点说:就是将页面在服务端渲染完成后在客户端直接显示。无需等待所有的 JavaScript
2020-07-31 21:58:04 3238 6
原创 基于react-slick的react轮播图实现(大众点评分类菜单)
文章目录安装常见参数大众点评中分类菜单最近在看慕课网react实战课(大众点评),这里会将项目项目中一些主要的点记录下来以供以后参考安装npm install react-slick --save// css安装npm install slick-carousel --save常见参数属性名属性默认值属性含义arrowsbool (default: true)是否要显示左右箭头autoplaybool (default: false)是否自动播放au
2020-07-23 00:24:23 2068
原创 JS数组常用方法
push作用:给数组末尾添加一项返回值:数组的最新长度原数组发生改变var a = [2,3,4];var b = a.push(5);console.log(a); //[2,3,4,5]console.log(b); //4pop作用:删除数组最后一项返回值:被删除的内容原数组发生改变var arr = [2,3,4];console.log(arr.pop()); //4console.log(arr); //[2,3]unshift作用..
2020-07-12 00:02:26 121
原创 JS算法
文章目录排序冒泡排序快速排序插入排序斐波那契数列排序冒泡排序原理:从第一个元素开始,把当前元素与下一个元素进行比较,如果当前元素大于下一个元素,那么对两个元素进行位置交换,一直到最后一个元素,第一轮比较结束,此时最后元素即为数组中的最大值;之后再重复上述操作,由于此时最后一个元素已经是最大的元素,因此不需要比较最后一个元素,以此类推,直到比较结束,代码如下:function sort(ary){ let len = ary.length; for (let i=0; i<len;
2020-07-09 22:52:29 311
原创 js面试题
这是一篇js面试题原型与原型链prototype:每个函数都有一个prototype属性,它是一个对象,是调用该构造函数而创建实例的原型(可以将属性或方法暴露成共用的)proto:每个对象(除了null)上都带一个属性__proto_,他指向当前实例所属类的原型(即创建它的构造函数的原型对象)constructor:每个原型都有一个 constructor 属性,他指向当前所属类(即...
2020-07-08 17:48:21 309
原创 Webpack面试题整理
文章目录基本概念与配置性能优化基本概念与配置什么是loader?什么是pluginloader是模块转换器,使wenbpack拥有加载和解析非js文件的能力,是在module.rules中进行配置plugin可以扩展webpack的功能,使得webpack更加灵活。可以在构建的过程中通过webpack的api改变输出的结果,在plugins中进行配置module, chunk, bundlemodule是开发中的单个模块,我们直接写出来的是 modulechunk是指webpac
2020-07-08 16:30:24 5369
转载 简单实现vue中的依赖收集与响应
文章目录开始添加Observer添加Watcher添加Dep开始声明一个对象man,可以视为vue中的datalet man = { height: 180, weight: 70, wealth: 100000000}添加Observer作用在于将参数对象的属性变为响应式,只要对象的属性被读取或者被修改都能观察到。然后新建一个Observer实例,将man作为参数扔进去。这里的proxyData是将man的属性代理到以man为参数的Observer实例上去。class Ob
2020-07-03 17:53:52 341
原创 Iterrator与Generator
文章目录Iterrator什么是Iterrator接口工作原理Iterrator的基本用法给对象添加Interator接口Generator基本概念next函数的用法yield*的语法Iterrator什么是Iterrator接口Symbol.iterator属性本身是一个函数可以为各种不同的数据结构提供统一的访问机制该接口主要供for…of来进行使用,即可以使用for…of进行遍历的就会具有Iterrator接口工作原理Iterator的遍历过程是这样的:创建一个指针对象,指向当前数
2020-07-01 15:51:07 344
原创 React基础(react-redux,中间件,异步action)—第四部分
文章目录react-redux中间件中间件用法applyMiddlewares异步actionredux-thunkredxu-sagareact-reduxreact-redux可以方便在react中使用redux提供的功能借助于Provider组件向根组件注入Store通过connect高阶组件,连接react组件和Redux状态层获取react组件所需的state和actionsreact-redux将所有组件分成两大类:UI组件和容器组件UI 组件负责 UI 的呈现,容器组件
2020-06-30 18:06:02 225
原创 React基础(redux)—第三部分
文章目录基本概念stateactionreducerreducer的拆分工作流程基本概念stateStore对象包含所有数据,用于集中管理数据,且是全局唯一state是只读的,唯一改变state的方法就是触发一个action其定义方式与React state相同{ todos: [{ text: 'Eat food', completed: true }, { text: 'Exercise', completed: false }], vis
2020-06-30 17:20:34 138
原创 React基础(SCU,公共逻辑抽离)—第二部分
文章目录SCU、PureComponent与memoSCU:shouldComponentUpdatePureComponent和memo关于组件公共逻辑的抽离高阶组件Render PropsHOC vs Render PropsRedux基本概念store stateactionreducer单项数据流react-redux异步action中间件SCU、PureComponent与memoSCU:shouldComponentUpdateReact默认:父组件有更新,子组件无条件更新!!因此在不
2020-06-30 17:20:14 798
原创 React面试真题演练
1、组件之间如何通讯父子组件props自定义事件redux和context2、JSX本质creatElement执行返回vnode3、Context是什么?如何应用?父组件,向其下所有子孙组件传递信息如一些简单的公共信息,主题,语言等复杂的公共信息,用 redux4、shouldComponentUpdate的用途性能优化配合不可变值一起使用,否则会出错5、什么是纯函数?返回一个新值,没有副作用,不会修改其它值重点就是不可变值如 arr1 = arr.sl
2020-06-28 17:50:18 222
原创 React常见面试题——原理篇
文章目录函数式编程vdom和diffjsx本质合成事件setState和batchUpdatetrantransaction事务机制组件渲染和更新过程函数式编程函数式编程是一种编程范式, 对过程进行抽象,将数据以输入输出流的方式封装进过程内部, 从而也降低系统的耦合度。纯函数:即相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用, 副作用包括但不限于:打印/log发送一个http请求DOM查询可变数据简单一句话, 即只要是与函数外部环境发生交互的都是副作用。像js中的slic
2020-06-28 17:18:05 3195
原创 js获取各种高度
1、屏幕的宽高window.screen.height; window.screen.width;2、屏幕工作区宽高 window.screen.availHeight; window.screen.availHeight;3.网页可见区域的高度和宽度(不含边线)document.body.clientWidth; document.body.clientHeight4、网页可见区域的高度和宽度(含边线)document.body.offsetWid...
2020-06-24 09:54:14 223
原创 js重写jquery中常见方法
/** * Created by jie on 2016/6/28. */var utils = (function () { var flag = "getComputedStyle" in window; function rnd(n, m) { n = Number(n); m = Number(m); if (isNaN(n) || isNaN(m)) { return Math.random(); .
2020-06-19 16:29:38 925
原创 js面试——eventLoop
什么是eventLoop?event loop指的是一种运行机制,规定了JS引擎是如何运行代码的。为什么会有eventLoop?由于JS是单线程执行的,所以任务(代码)的执行需要进行排队。任务分为两种:同步和异步,针对异步任务,首先会被推到任务队列中,然后根据event loop机制进行执行JS运行机制以上为事件循环示例图: step1:主线程读取JS代码,此时为同步环境,形成相应的堆和执行栈; step2:主线程遇到异步任务,指给对应的异步进程进行处理(WEB ...
2020-06-16 13:40:41 859
原创 React基础(基础使用)-第一部分
1.条件渲染 方式1:利用函数方法输出组件renderButton(){ const isLoggedIn = this.state.isLoggedIn; if(isLoggedIn) { return (<LogoutButton onClick={this.handleLogoutClick} />); } else { return (<LoginButton onClick={this.h...
2020-06-11 23:14:39 172
原创 vue常见面试题
v-if与v-show的区别:v-showv-show通过CSS dispaly控制显示和隐藏 v-if组件真正的渲染和销毁,而不是显示和隐藏 频繁切换状态使用v-show,否则使用v-if为何要在v-for中使用key必须使用key,且不能是index和random diff算法中通过tag和key来判断,是否sanmeNode 减少渲染次数,提升渲染性能(如果发现是sameNode,那么会将node的位置进行移动)描述Vue组件生命周期(父子组件)创建前后beforeCreate
2020-05-21 16:22:32 6533 1
原创 commonJs-模块引入require的简单实现
我们知道,在node中每个文件就是一个模块,在模块之间不会造成变量污染和命名冲突等问题。通过exports 或者 module.exports 导出一个模块,通过require 来引入一个模块关于模块的介绍,可参考原先写的一篇博客node学习笔记-模块,这篇博客主要简单介绍了在模块引入时步骤及简单原理,模块在引入时,需要经历以下过程路径解析创建模块尝试加载该模块尝试加载该模块时...
2019-04-23 15:23:18 2652
原创 Promise的使用及原理(三):Promise上的方法及promisify
5、Promise的all方法Promise的all方法提供了并行执行异步操作的能力,并且在所有异步操作执行完后才执行回调三个异步操作的并行执行的,等到它们都执行完后才会进到then里面,三个异步操作的返回数据会放进一个数组中传给then首先我们先来了解下其使用 function runAsync1(){ return new Promise(function(r...
2019-04-04 17:46:14 807
原创 Promise的使用及原理(二):promise的链式调用及测试
3、promise的链式调用在上面我们已经对异步处理进行优化,但是我们知道promise主要是为了解决回调地狱的问题,那么就涉及到链式调用,很明显,我们上面的代码还不满足链式调用;如果需要满足链式调用,那么then方法中应当返回一个promise首先,我们先来看一个promise链式调用的简单demo,其中name.txt存放的是"./age.txt",age.txt存放的是"age ...
2019-04-04 17:46:03 1081
原创 Promise的使用及原理(一):简单的promise使用及异步处理
1、简单的promise使用 let p = new Promise(function (resolve, reject) { console.log("start"); resolve("成功的回调"); // reject("失败的回调"); }); p.then((data) => { consol...
2019-04-04 17:45:50 1227
原创 ES6学习-let,块级作用域,const
文章参考:ECMAScript 6 入门-let 和 const 命令letlet命令有四大主要特性:存在块级作用域,没有变量提升,暂时性死区,不允许重复声明1、存在块级作用域let命令声明的变量只在其块级作用域中有效,就是{}中。{ let a = 10; var b = 1;}console.log(a); //出错 not definedconsole.lo...
2019-03-12 13:35:49 2506 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人