美文网首页
Vue3 探究

Vue3 探究

作者: liwuwuzhi | 来源:发表于2020-07-15 17:12 被阅读0次

体验vue3的三种姿势:

  • vue-cli
  • 官方的webpack-preview
  • vite

详细步骤:
vue-cli:

npm install -g @vue/cli
vue create 01-vue3-cli
cd 01-vue3-cli
vue add vue-next
npm run serve

webpack-preview:

git clone https://github.com/vuejs/vue-next-webpack-preview.git 01-vue3-webpack
cd 01-vue3-webpack
npm install 
npm run dev

vite:

npm install -g create-vite-app
create-vite-app 01-vue3-vite
cd 01-vue3-vite
npm install
npm run dev

关于 Vite

大致的原理是拦截import发出的http请求,返回浏览器的代码,也保留了import语法,让浏览器自己去处理依赖 script type module 支持import;

让浏览器处理es6 import的活,好处就是当前页面引用多少,编译多少,项目越大优势越大。

关于 proxy 与 vdom重写

vue2初始化 所有的数据都要走defineProperty ;

vue3用proxy 动态的决定返回什么 做了拦截,初始工作量减少 组件实例化的提升还是明显。

动态静态模板 vue2一竿子到底 全部diff,而vue3在模板层做静态分析。生成聪明的渲染函数。

静态提升,节点结构根据v-if和v-for切分出block,block内部节点结构石不变的,我们直接把动态节点维护在一个数组里即可。

一个大模板 可能嵌套了十层,但是没有v-if或者v-for的话,整个模板只需要记录一个数组,包含动态节点,就是这样。

vue2也有static标记优化,但是做的不极致,vue3设计了block的概念,update只和动态内容强相关,和静态内容解耦了,大部分项目静态节点比你想象的多,比如一些为了布局存在的div等。

关于 Composition API

  • reactive
  • watchEffect
  • ref

其实Vue2现在就有一个全局的方法,方法叫做Vue.observable。这个其实就是跟Vue3的这个reactive,是一样的:

it('should observe basic properties', () => {
   let dummy
   const counter = reactive({ num: 0 })
   effect(() => (dummy = counter.num))

   expect(dummy).toBe(0)
   counter.num = 7
   expect(dummy).toBe(7)
 })

eactive负责对象等负责数据,ref负责基本数据变成响应式 比如数字和字符串,effect负责副作用,这三个概念就是响应式的核心,而且ref和reactive还有一点点小区别。

reactive直接遍历对象+Proxy, ref其实也可以用reactive实现,不过ref只用到了valute属性,所以完全可以使用get和set来实现依赖收集和通知,有更好的性能。

function createRef(rawValue: unknown, shallow = false) {
  if (isRef(rawValue)) {
    return rawValue
  }
  let value = shallow ? rawValue : convert(rawValue)
  const r = {
    __v_isRef: true,
    get value() {
      track(r, TrackOpTypes.GET, 'value')
      return value
    },
    set value(newVal) {
      if (hasChanged(toRaw(newVal), rawValue)) {
        rawValue = newVal
        value = shallow ? newVal : convert(newVal)
        trigger(
          r,
          TriggerOpTypes.SET,
          'value',
          __DEV__ ? { newValue: newVal } : void 0
        )
      }
    }
  }
  return r
}

整个 Componsition API,体现的是一种逻辑抽象能力。是 reactive、watchEffect、ref 的组合。

主要就是可以把生命周期,响应式数据,操作函数,全部抽离再一个内部函数,所以vue3的组件就可以无限的拆分,并且数据来源还可以异常清晰。

所以可以用 Componsition API 替代 mixin。
(mixin 的缺点:1.当嵌套了很多层后,不是是从哪层 mixin 来的;2. mixin 的类型推到不清晰)




相关参考:
Vue Composition API

相关文章

网友评论

      本文标题:Vue3 探究

      本文链接:https://www.haomeiwen.com/subject/cfrjhktx.html