page contents
Nen
Nen - 程序员

性别: 天津 - 天津市 注册于 2021-06-23

向TA求助
2850金币数
43180 经验值
1个粉丝
主页被访问 6244 次

3096 个回答

0 赞同

Vue 响应式原理?

key 是给每一个 vnode 的唯一 id,依靠 key,我们的 diff 操作可以更准确、更快速 (对于简单列表页渲染来说 diff 节点也更快,但会产生一些隐藏的副作 用,比如可能不会产生过渡效果,或者在某些节点有绑定数据(表单)状态,会出现状态错位。) diff 算法的过程中,先会进行新旧节点的首尾交叉对比,当无法匹配的时候会用新节点...

回答于 2021-12-25 14:04

0 赞同

computed 的实现原理?

computed 本质是一个惰性求值的观察者。computed 内部实现了一个惰性的 watcher,也就是 computed watcher,computed watcher 不会立刻求值, 同时持有一个 dep 实例。其内部通过 this.dirty 属性标记计算属性是否需要重新求值。当 computed 的依赖状态发生改变时,就会通知这个惰性的 watcher,computed watcher 通过 this.de...

回答于 2021-12-25 14:03

0 赞同

computed 和 watch 有什么区别及运用场景?

区别: computed 计算属性 : 依赖其它属性值,并且 computed 的值有缓存,只有它依赖的属性值发生改变,下一次获取 computed 的值时才会重新计算computed 的值。 watch 侦听器 : 更多的是「观察」的作用,无缓存性,类似于某些数据的监听回调,每当监听的数据变化时都会执行回调进行后续操作。 运用场景: 当我们需要进行数值...

回答于 2021-12-25 14:02

0 赞同

为什么在 Vue3.0 采用了 Proxy,抛弃了Object.defineProperty?

Object.defineProperty 本身有一定的监控到数组下标变化的能力,但是在 Vue 中,从性能/体验的性价比考虑,尤大大就弃用了这个特性(Vue 为什么不 能检测数组变动 )。为了解决这个问题,经过 vue 内部处理后可以使用以下几种方法来监听数组 push(); pop(); shift(); unshift(); splice(); sort(); reverse(); 由于只针...

回答于 2021-12-25 14:01

0 赞同

Vue 中的 key 到底有什么用?

key 是给每一个 vnode 的唯一 id,依靠 key,我们的 diff 操作可以更准确、更快速 (对于简单列表页渲 用,比如可能不会产生过渡效果,或者在某些节点有绑定数据(表单)状态,会出现状态错位。) diff 算法的过程中,先会进行新旧节点的首尾交叉对比,当无法匹配的时候会用新节点的 key 与旧节 更准确 : 因为带 key 就不是就地...

回答于 2021-12-25 14:00

0 赞同

谈一谈 nextTick 的原理?

JS 运行机制 JS 执行是单线程的,它是基于事件循环的。事件循环大致分为以下几个步骤: 所有同步任务都在主线程上执行,形成一个执行栈(execution context stack)。 主线程之外,还存在一个”任务队列”(task queue)。只要异步任务有了运行结果,就在”任务队列”之中放置一个事件。一旦”执行栈”中的所有同步 任务执行完...

回答于 2021-12-25 13:59

0 赞同

Vue 响应式原理

整体思路是数据劫持+观察者模式 对象内部通过 defineReactive 方法,使用 Object.defineProperty 将属性进行劫持(只会劫持已经存在的属性),数组则是通过重写数组方法来实 现。当页面使用对应属性时,每个属性都拥有自己的 dep 属性,存放他所依赖的 watcher(依赖收集),当属性变化后会通知自己对应的 watcher 去更...

回答于 2021-12-24 14:32

0 赞同

Vue nextTick 原理

nextTick 中的回调是在下次 DOM 更新循环结束之后执行的延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。主要思路就是采 用微任务优先的方式调用异步方法去执行 nextTick 包装的方法 let callbacks = []; let pending = false; function flushCallbacks() {  pending = false; //把标志还原为false  //...

回答于 2021-12-24 14:31

0 赞同

手写 Vue.extend 实现

//  src/global-api/initExtend.js import { mergeOptions } from "../util/index"; export default function initExtend(Vue) {   let cid = 0; //组件的唯一标识   // 创建子类继承Vue父类 便于属性扩展   Vue.extend = function (extendOptions) {     // 创建子类的构造函数 并且调用初始化方法     const Sub =...

回答于 2021-12-24 14:30

0 赞同

什么是 MVVM

MVVM是Model-View-ViewModel的缩写。MVVM是一种设计思想。Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑; View 代表UI 组件,它负责将数据模型转化成UI 展现出来,ViewModel 是一个同步View 和 Model的对象。 在MVVM架构下,View 和 Model 之间并没有直接的联系,而是通过ViewModel进行交互,Mode...

回答于 2021-12-24 14:29