美文网首页
你真的了解vue吗?vue3.0初体验

你真的了解vue吗?vue3.0初体验

作者: 王一诺Eno | 来源:发表于2020-07-09 17:55 被阅读0次

@TOC


镇楼图--杀生丸.jpg

image.png

作者上篇文章已经对ue2.0响应式的一个原理做了比较详细的介绍,但2019年10月5日,尤小右公开了 Vue 3.0 的源代码。源码地址:vue-next,至于vue预版本的优势在github都接下来就让我给各位看官大佬介绍一个这个3.0前的一些内容吧;

vue-next(vue3.0预体验)

由于vue-next并不是最终的版本,目前有一些尤大神在知乎上尤小右 3.0 RFC曝光的一些api尚无包含,就目前版本而言,还是能体验一下未来版本使用;下载好vue-next

  • 首先执行
npm i 

npm run dev
  • 现版本执行npm run dev 会直接打包文件在dist目录下面

1. 使用:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
  <div id="app"></div>
  <script src="vue.global.js"></script>
  <script>
    console.log('Vue====',Vue)
    const App = {
        setup() {
          // reactive state
          let count =  Vue.reactive({value:1}) // 知乎上尤大大推荐的是使用 const count = value(0) 但目前这个版本是没有value的 先用reactive做响应
          // computed state
          const plusOne = Vue.computed(() => count.value * 2)
          // method
          const increment = () => {
             count.value++ 

            }
          // watch
          Vue.watch(() => count.value * 2, val => {
            console.log(`value * 2 is ${val}`)
          })
          // lifecycle
          Vue.onMounted(() => {
            console.log(`mounted`)
          })
          // expose bindings on render context
          return {
            count,
            plusOne,
            increment
          }
        },
        template: `
          <div>
            <div>count is {{ count.value }}</div>
            <span>plusOne is {{ plusOne }}</span>
            <button @click="increment">count++</button>
          </div>
        `,
      }
    Vue.createApp().mount(App,app)
  </script>
</body>
</html>
  • 执行表现如下:


    vue3.0.gif
  • 控制台输出如下图:


    控制台输出.png

2.vue-next的目录结构

image.png

1 编译时:

  • compiler-core : 编译时一些核心模块,不分平台, 比如v-if v-for v-model等 存放于这个目录下;
  • compiler-dom : 基于compiler-core编译时一些dom的方法,如 v-html,v-text等,编译成浏览器能识别的东西;

2 运行时

  • runtime-core :运行时一些核心api,如创建组件的createComponent、创建vDOM的createRenderer等;
  • runtime-dom : 主要包含基于runtime-core生成浏览器支持的dom的方法等;

3 响应式核心

  • reactivity : 核心!下个版本的vue不再使用Object.defineProperty做响应式处理,而是通过proxy
    做响应式;

proxy的优势: Proxy 对象用于定义基本操作的自定义行为(如属性查找,赋值,枚举,函数调用等)。1.相较于Object.defineProperty,proxy可以直接监听对象而非其属性,并返回一个新对象。2.可以直接监听数组的变化;3

3. reactive内部实现

  1. 通过vue3.0的源码及现有的一些文档可知: vue3后
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script src="vue.global.js"></script>
    <script>
        let obj = Vue.reactive({value:1});
        Vue.effect(()=>{
            console.log(obj.value)
        })
        obj.value += 1
    </script>
</body>
</html>

未完待续~ 原来19年写的文章忘记发布了啊

相关文章

网友评论

      本文标题:你真的了解vue吗?vue3.0初体验

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