您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    尤雨溪新作品功用尝鲜,听说仅5.8kb?
    时间:2021-08-05 21:08 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    尤雨溪新作品功用尝鲜,听说仅5.8kb?

    前言

    尤雨溪新作品功用尝鲜,听说仅5.8kb?

    image.png

    翻开尤大大的GitHub,发现多了个叫 petite-vue 的东西,好家伙,Vue3 和 Vite 还没学完呢,又末尾整新东西了?本着学不死就往死里学的态度,咱还是来瞅瞅这究竟是个啥东西吧,谁让他是咱的祖师爷呢!

    简介

    尤雨溪新作品功用尝鲜,听说仅5.8kb?

    image.png

    从名字来看可以知道 petite-vue 是一个 mini 版的vue,大小只要5.8kb,可以说是十分小了。据尤大大引见,petite-vue 是 Vue 的可替代发行版,针对渐进式增强停止了优化。它提供了与标准 Vue 相反的模板语法和照应式模型:

    大小只要5.8kb

    Vue 兼容模版语法

    基于DOM,就地转换

    照应式驱动

    上活

    下面对 petite-vue 的运用做一些引见。

    复杂运用

    <body> 

      <script src="https://unpkg.com/petite-vue" defer init></script> 

      <div v-scope="{ count: 0 }"

        <button @click="count--">-</button> 

        <span>{{ count }}</span> 

        <button @click="count++">+</button> 

      </div> 

    </body> 

    经过 script 标签引入同时添加 init ,接着就可以运用 v-scope 绑定数据,这样一个复杂的计数器就完成了。

    了解过 Alpine.js 这个框架的同窗看到这里能够有点眼熟了,两者语法之间是很像的。

    <!--  Alpine.js  --> 

    <div x-data="{ open: false }"

      <button @click="open = true">Open Dropdown</button> 

      <ul x-show="open" @click.away="open = false"

        Dropdown Body 

      </ul> 

    </div> 

    除了用 init 的方式之外,也可以用下面的方式:

    <body> 

      <div v-scope="{ count: 0 }"

        <button @click="count--">-</button> 

        <span>{{ count }}</span> 

        <button @click="count++">+</button> 

      </div> 

      <!--  放在body底部  --> 

      <script src="https://unpkg.com/petite-vue"></script> 

      <script> 

        PetiteVue.createApp().mount() 

      </script> 

    </body> 

    或运用 ES module 的方式:

    <body> 

      <script type="module"

        import { createApp } from 'https://unpkg.com/petite-vue?module' 

        createApp().mount() 

      </script> 

       

      <div v-scope="{ count: 0 }"

        <button @click="count--">-</button> 

        <span>{{ count }}</span> 

        <button @click="count++">+</button> 

      </div>   

    </body> 

    根作用域

    createApp 函数可以接受一个对象,相似于我们往常运用 data 和 methods 一样,这时 v-scope 不需求绑定值。

    <body> 

      <script type="module"

        import { createApp } from 'https://unpkg.com/petite-vue?module' 

        createApp({ 

          count: 0

          increment() { 

            this.count++ 

          }, 

          decrement() { 

            this.count-- 

          } 

        }).mount() 

      </script> 

       

      <div v-scope> 

        <button @click="decrement">-</button> 

        <span>{{ count }}</span> 

        <button @click="increment">+</button> 

      </div> 

    </body> 

    指定挂载元素

    <body> 

      <script type="module"

        import { createApp } from 'https://unpkg.com/petite-vue?module' 

        createApp({ 

          count: 0 

        }).mount('#app'

      </script> 

       

      <div id="app"

        {{ count }} 

      </div> 

    </body> 

    生命周期

    可以监听每个元素的生命周期事情。

    <body> 

      <script type="module"

        import { createApp } from 'https://unpkg.com/petite-vue?module' 

        createApp({ 

          onMounted1(el) { 

            console.log(el) // <span>1</span> 

          }, 

          onMounted2(el) { 

            console.log(el) // <span>2</span> 

          } 

        }).mount('#app'

      </script> 

       

      <div id="app"

        <span @mounted="onMounted1($el)">1</span> 

        <span @mounted="onMounted2($el)">2</span> 

      </div> 

    </body> 

    组件

    在 petite-vue 里,组件可以运用函数的方式创立,经过template可以完成复用。

    <body> 

      <script type="module"

      import { createApp } from 'https://unpkg.com/petite-vue?module' 

     

      function Counter(props) { 

        return { 

          $template: '#counter-template'

          count: props.initialCount, 

          increment() { 

            this.count++ 

          }, 

          decrement() { 

            this.count++ 

          } 

        } 

      } 

     

      createApp({ 

        Counter 

      }).mount() 

    </script> 

     

    <template id="counter-template"

      <button @click="decrement">-</button> 

      <span>{{ count }}</span> 

      <button @click="increment">+</button> 

    </template> 

     

    <!-- 复用 --> 

    <div v-scope="Counter({ initialCount: 1 })"></div> 

    <div v-scope="Counter({ initialCount: 2 })"></div> 

    </body> 

    全局形状管理

    借助 reactive 照应式 API 可以很轻松的创立全局形状管理

    <body> 

      <script type="module"

        import { createApp, reactive } from 'https://unpkg.com/petite-vue?module' 

     

        const store = reactive({ 

          count: 0

          increment() { 

            this.count++ 

          } 

        }) 

        // 将count加1 

        store.increment() 

        createApp({ 

          store 

        }).mount() 

      </script> 

     

      <div v-scope> 

        <!-- 输入1 --> 

        <span>{{ store.count }}</span> 

      </div> 

      <div v-scope> 

        <button @click="store.increment">+</button> 

      </div> 

    </body> 

    自定义指令

    这里来复杂完成一个输入框自动聚焦的指令。

    <body> 

      <script type="module"

        import { createApp } from 'https://unpkg.com/petite-vue?module' 

         

        const autoFocus = (ctx) => { 

          ctx.el.focus() 

        } 

     

        createApp().directive('auto-focus', autoFocus).mount() 

      </script> 

     

      <div v-scope> 

        <input v-auto-focus /> 

      </div> 

    </body> 

    内置指令

    v-model

    v-if / v-else / v-else-if

    v-for

    v-show

    v-html

    v-text

    v-pre

    v-once

    v-cloak

    留意:v-for 不需求key,另外 v-for 不支持 深度解构

    <body> 

      <script type="module"

        import { createApp } from 'https://unpkg.com/petite-vue?module' 

         

        createApp({ 

          userList: [ 

            { name: '张三', age: { a: 23, b: 24 } }, 

            { name: '李四', age: { a: 23, b: 24 } }, 

            { name: '王五', age: { a: 23, b: 24 } } 

          ] 

        }).mount() 

      </script> 

     

      <div v-scope> 

        <!-- 支持 --> 

        <li v-for="{ age } in userList"

          {{ age.a }} 

        </li> 

        <!-- 不支持 --> 

        <li v-for="{ age: { a } } in userList"

          {{ a }} 

        </li> 

      </div> 

    </body> 

    不支持

    为了更轻量小巧,petite-vue 不支持以下特性:

    ref()、computed

    render函数,由于petite-vue 没有虚拟DOM

    不支持Map、Set等照应类型

    Transition, KeepAlive, Teleport, Suspense

    v-on="object"

    v-is &

    v-bind:style auto-prefixing

    总结

    以上就是对 petite-vue 的一些复杂引见和运用,抛砖引玉,更多新的探求就由你们去发现了。

    (责任编辑:admin)