hincky的主页 hincky的主页
  • 学习笔记

    • Vue笔记
    • Vuepress
    • nginx
  • 语言类

    • java
    • go
    • python
    • 设计模式
  • 框架类

    • Spring
    • Spring Security
    • Mybatis
  • 容器技术

    • docker
    • k8s
    • helm
    • prometheus
    • grafana
    • jenkins
  • 命令集合

    • linux命令
    • docker命令
    • git命令
    • vim命令
    • k8s命令
  • 数据库

    • sql
    • mysql
  • 协议

    • 网络模型
    • http/1.1
    • WebSocket
    • http/2
    • TLS/SSL
    • tcp
    • IP
    • tcpdump抓包命令
    • wireshark抓包工具
  • 通用

    • Git
  • 技术分享

    • git push/pull总是超时怎么办
    • idea debug技巧
    • postman使用
    • 问题总结
    • idea使用技巧
  • Oauth2

    • Oauth2原理
  • 项目列表

    • redis项目
    • 微服务项目
  • 分类
  • 标签
  • 归档
  • 随笔
GitHub (opens new window)

Hincky

当有趣的人,做想做的事
  • 学习笔记

    • Vue笔记
    • Vuepress
    • nginx
  • 语言类

    • java
    • go
    • python
    • 设计模式
  • 框架类

    • Spring
    • Spring Security
    • Mybatis
  • 容器技术

    • docker
    • k8s
    • helm
    • prometheus
    • grafana
    • jenkins
  • 命令集合

    • linux命令
    • docker命令
    • git命令
    • vim命令
    • k8s命令
  • 数据库

    • sql
    • mysql
  • 协议

    • 网络模型
    • http/1.1
    • WebSocket
    • http/2
    • TLS/SSL
    • tcp
    • IP
    • tcpdump抓包命令
    • wireshark抓包工具
  • 通用

    • Git
  • 技术分享

    • git push/pull总是超时怎么办
    • idea debug技巧
    • postman使用
    • 问题总结
    • idea使用技巧
  • Oauth2

    • Oauth2原理
  • 项目列表

    • redis项目
    • 微服务项目
  • 分类
  • 标签
  • 归档
  • 随笔
GitHub (opens new window)
  • Vue笔记

    • 基础

    • 组件

      • 使用组件的细节点
        • 解析 DOM 模板时的注意事项
        • 子组件内的data要使用函数返回
        • 通过 ref 引用操作DOM
      • 父组件给子组件传值
        • 单向数据流
        • 父子组件间传递数据 demo
      • 子组件派发事件和值给父组件
        • 父子组件间传递数据 demo
      • Prop 验证 与 非 Prop 的 Attribute
        • Prop 验证
        • 非 Prop 的 Attribute
          • 用处
      • 自定义事件
        • 兄弟组件传值
        • 非父子组件传值
        • 父组件调用子组件方法并传入值
        • 插槽slot
          • 插槽
            • 默认值
          • 具名插槽
          • 作用域插槽
            • 作用:
          • 具名插槽的缩写
          • Demo
        • 动态组件与 v-once 指令
          • 动态组件
            • 动态组件 demo
          • v-once 指令
            • 通过 v-once 创建低开销的静态组件
        • vue父子组件的生命周期顺序
        • 过渡&动画

        • 可复用性&组合

        • 工具

        • 规模化

        • Vuex

        • 其他

      • vuepress

      • nginx

      • 前端
      • Vue笔记
      • 组件
      xugaoyi
      2020-02-16
      目录

      动态组件与 v-once 指令

      # 动态组件与 v-once 指令

      # 动态组件

      <div id="root">
      	<component :is="type"></component> <!--其效果如同下面两行被注释的代码-->
      	<!-- <child-one v-if="type === 'child-one'"></child-one>
      	    <child-two v-if="type === 'child-two'"></child-two> -->
      	<button @click="handleClick">change</button>
      </div>
      <script type="text/javascript">
          Vue.component('child-one', {
              template: '<div>child-one</div>'
          })
          Vue.component('child-two', {
              template: '<div>child-two</div>'
          })
      
          var vm = new Vue({
              el: '#root',
              data: {
                  type: 'child-one'
              },
              methods: {
                  handleClick() {
                      this.type = this.type === 'child-one' ? 'child-two' : 'child-one'
                  }
              }
          })
      </script>
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26

      上面代码中,点击按钮在两个组件间切换,可使用<component>标签并绑定:is为动态组件名。

      # 动态组件 demo

      See the Pen 动态组件 by xugaoyi (@xugaoyi) on CodePen.

      # v-once 指令

      • 不需要表达式

      • 详细:

        只渲染元素和组件一次。随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过。这可以用于优化更新性能。

        <!-- 单个元素 -->
        <span v-once>This will never change: {{msg}}</span>
        <!-- 有子元素 -->
        <div v-once>
          <h1>comment</h1>
          <p>{{msg}}</p>
        </div>
        <!-- 组件 -->
        <my-component v-once :comment="msg"></my-component>
        <!-- `v-for` 指令-->
        <ul>
          <li v-for="i in list" v-once>{{i}}</li>
        </ul>
        
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
      • 参考:

        • 数据绑定语法- 插值 (opens new window)
        • 组件 - 对低开销的静态组件使用 v-once (opens new window)

      # 通过 v-once 创建低开销的静态组件

      渲染普通的 HTML 元素在 Vue 中是非常快速的,但有的时候你可能有一个组件,这个组件包含了大量静态内容。在这种情况下,你可以在根元素上添加 v-once attribute 以确保这些内容只计算一次然后缓存起来,就像这样:

      Vue.component('terms-of-service', {
        template: `
          <div v-once>
            <h1>Terms of Service</h1>
            ... a lot of static content ...
          </div>
        `
      })
      
      1
      2
      3
      4
      5
      6
      7
      8

      警告

      再说一次,试着不要过度使用这个模式。当你需要渲染大量静态内容时,极少数的情况下它会给你带来便利,除非你非常留意渲染变慢了,不然它完全是没有必要的——再加上它在后期会带来很多困惑。例如,设想另一个开发者并不熟悉 v-once 或漏看了它在模板中,他们可能会花很多个小时去找出模板为什么无法正确更新。

      编辑 (opens new window)
      #Vue
      插槽slot
      vue父子组件的生命周期顺序

      ← 插槽slot vue父子组件的生命周期顺序→

      最近更新
      01
      人生前期重要的能力
      05-17
      02
      防火墙命令
      04-11
      03
      docker-compose部署mysql主从集群
      03-22
      更多文章>
      Theme by Vdoing | Copyright © 2022-2023 Hincky | MIT License | 粤ICP备2022120427号
      • 跟随系统
      • 浅色模式
      • 深色模式
      • 阅读模式