返回顶部
首页 > 资讯 > 前端开发 > VUE >Vue中函数化组件的示例分析
  • 288
分享到

Vue中函数化组件的示例分析

2024-04-02 19:04:59 288人浏览 安东尼
摘要

这篇文章将为大家详细讲解有关Vue中函数化组件的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。介绍之前创建的锚点标题组件是比较简单,没有管理或者监听任何传递给他的

这篇文章将为大家详细讲解有关Vue中函数化组件的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

介绍

之前创建的锚点标题组件是比较简单,没有管理或者监听任何传递给他的状态,也没有生命周期方法。它只是一个接收参数的函数。

在这个例子中,我们标记组件为 functional, 这意味它是无状态(没有 data),无实例(没有 this 上下文)。

一个 函数化组件 就像这样:

Vue.component('my-component', {
 functional: true,
 // 为了弥补缺少的实例
 // 提供第二个参数作为上下文
 render: function (createElement, context) {
  // ...
 },
 // Props 可选
 props: {
  // ...
 }
})

组件需要的一切都是通过上下文传递,包括:

  1. props: 提供props 的对象

  2. children: Vnode 子节点的数组

  3. slots: slots 对象

  4. data: 传递给组件的 data 对象

  5. parent: 对父组件的引用

  6. listeners: (2.3.0+) 一个包含了组件上所注册的 v-on 侦听器的对象。这只是一个指向 data.on 的别名。

  7. injections: (2.3.0+) 如果使用了 inject 选项, 则该对象包含了应当被注入的属性。

在添加 functional: true 之后,锚点标题组件的 render 函数之间简单更新增加context参数,this.$slots.default 更新为 context.children,之后this.level 更新为 context.props.level。

因为函数化组件只是一个函数,所以渲染开销也低很多。另外,这也意味着函数化组件不会出现在 Vuejs Chrome 开发工具的组件树里。

在作为包装组件时它们也同样非常有用,比如,当你需要做这些时:

程序化地在多个组件中选择一个

在将 children, props, data 传递给子组件之前操作它们。

下面是一个依赖传入 props 的值的smart-list组件例子,它能代表更多具体的组件:

var EmptyList = {  }
var TableList = {  }
var OrderedList = {  }
var UnorderedList = {  }
Vue.component('smart-list', {
 functional: true,
 render: function (createElement, context) {
  function appropriateListComponent () {
   var items = context.props.items
   if (items.length === 0)      return EmptyList
   if (typeof items[0] === 'object') return TableList
   if (context.props.isOrdered)   return OrderedList
   return UnorderedList
  }
  return createElement(
   appropriateListComponent(),
   context.data,
   context.children
  )
 },
 props: {
  items: {
   type: Array,
   required: true
  },
  isOrdered: Boolean
 }
})

slots()和children对比

你可能想知道为什么同时需要 slots()childrenslots().default 不是和 children 类似的吗?在一些场景中,是这样,但是如果是函数式组件和下面这样的 children 呢?

<my-functional-component>
 <p slot="foo">
  first
 </p>
 <p>second</p>
</my-functional-component>

对于这个组件,children 会给你两个段落标签,而 slots().default 只会传递第二个匿名段落标签,slots().foo 会传递第一个具名段落标签。同时拥有 children 和 slots() ,因此你可以选择让组件通过 slot() 系统分发或者简单的通过 children 接收,让其他组件去处理。

示例

渐进过渡

之前的Vue学习笔记进阶篇——列表过渡及其他中可复用的过渡提到用函数组件实现合适,下面就用函数化组件来实现那个渐进过渡

<div id="app5">
  <input v-model="query">
  <my-transition :query="query" :list="list">
    <li v-for="(item, index) in computedList"
      :key="item.msg"
      :data-index="index">
      {{item.msg}}
    </li>
  </my-transition>
</div>
  Vue.component('my-transition', {
    functional:true,
    render:function (h, ctx) {
      var data = {
        props:{
          tag:'ul',
          CSS:false
        },
        on:{
          beforeEnter:function (el) {
            el.style.opacity = 0
            el.style.height = 0
          },
          enter:function (el, done) {
            var delay = el.dataset.index * 150
            setTimeout(function () {
              Velocity(el, {opacity:1, height:'1.6em'},{complete:done})
            }, delay)
          },
          leave:function (el, done) {
            var delay = el.dataset.index * 150
            setTimeout(function () {
              Velocity(el, {opacity:0, height:0}, {complete:done})
            }, delay)
          }
        }
      }
      return h('transition-group', data, ctx.children)
    },
    props:['query', 'list']
  })

  var app5 = new Vue({
    el:'#app5',
    data:{
      query:'',
      list:[
        {msg:'Bruce Lee'},
        {msg:'Jackie Chan'},
        {msg:'Chuck Norris'},
        {msg:'Jet Li'},
        {msg:'Kung Furry'},
        {msg:'Chain Zhang'},
        {msg:'Iris Zhao'},
      ]
    },
    computed:{
      computedList:function () {
        var vm = this
        return this.list.filter(function (item) {
          return item.msg.toLowerCase().indexOf(vm.query.toLowerCase()) !== -1
        })
      }
    },
  })

运行结果:

Vue中函数化组件的示例分析

关于“Vue中函数化组件的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: Vue中函数化组件的示例分析

本文链接: https://lsjlt.com/news/78617.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Vue中函数化组件的示例分析
    这篇文章将为大家详细讲解有关Vue中函数化组件的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。介绍之前创建的锚点标题组件是比较简单,没有管理或者监听任何传递给他的...
    99+
    2024-04-02
  • Vue函数式组件的示例分析
    这篇文章将为大家详细讲解有关Vue函数式组件的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。函数式组件特点:没有管理任何状态没有监听任何传递给它的状态没有生命周期...
    99+
    2024-04-02
  • vue中组件参数的示例分析
    这篇文章给大家分享的是有关vue中组件参数的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.vue中组件参数我们可以为组件的 prop 指...
    99+
    2024-04-02
  • Vue中组件的示例分析
    这篇文章将为大家详细讲解有关Vue中组件的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。<body>    <div id=&q...
    99+
    2023-06-25
  • vue中组件元数据的示例分析
    这篇文章将为大家详细讲解有关vue中组件元数据的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。组件元数据并不是你添加到组件的每一点信息都是状态。有时你需要添加一些元数据来为其他组件提供更多信息。例...
    99+
    2023-06-27
  • Vue组件的示例分析
    这篇文章主要介绍了Vue组件的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Vue实例项目启动过程看一下现在我们的项目,想想整个项目...
    99+
    2024-04-02
  • vue组件化的实例分析
    这篇文章将为大家详细讲解有关vue组件化的实例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。全局组件<!DOCTYPE html> <ht...
    99+
    2024-04-02
  • Vue中钩子函数的示例分析
    这篇文章主要介绍了Vue中钩子函数的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Vue-Router导航守卫:有的时候,我们需要通...
    99+
    2024-04-02
  • Vue组件通信的示例分析
    这篇文章主要介绍Vue组件通信的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!实践方法由于更换新的框架,我们的项目由Avalon更新成Vue.但是为了兼容以前的业务代码,不能...
    99+
    2024-04-02
  • vue组件传值的示例分析
    这篇文章主要为大家展示了“vue组件传值的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue组件传值的示例分析”这篇文章吧。前言vue中的组件传值大家应该都不陌生,今天用两个简单易懂的...
    99+
    2023-06-29
  • Vue中子组件与数据传递的示例分析
    小编给大家分享一下Vue中子组件与数据传递的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!如何传递父组件向子组件在进行传...
    99+
    2024-04-02
  • Vue中拖拽组件开发的示例分析
    这篇文章主要为大家展示了“Vue中拖拽组件开发的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue中拖拽组件开发的示例分析”这篇文章吧。为什么选择Vu...
    99+
    2024-04-02
  • vue中全选组件封装的示例分析
    这篇文章将为大家详细讲解有关vue中全选组件封装的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。效果 封装的组件<template>  <el-fo...
    99+
    2023-06-29
  • vue组件与复用的示例分析
    这篇文章给大家分享的是有关vue组件与复用的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、什么是组件组件 (Component) 是 Vue.js 最强大的功能之一。...
    99+
    2024-04-02
  • vue可重用组件的示例分析
    这篇文章给大家分享的是有关vue可重用组件的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。可重用组件不是你想的那样可重用组件不一定是大的或复杂的东西,我经常使小而短的组件可重复使用。因为我不会到处重写这段...
    99+
    2023-06-27
  • vue中.vue文件解析的示例分析
    这篇文章将为大家详细讲解有关vue中.vue文件解析的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。vue 提供了一个 compiler.parseCompone...
    99+
    2024-04-02
  • Vue性能优化之深挖数组的示例分析
    这篇文章主要介绍Vue性能优化之深挖数组的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!背景最近在用 Vue 重构一个历史项目,一个考试系统,题目量很大,所以核心组件的性能成...
    99+
    2024-04-02
  • vue组件之间数据传递的示例分析
    小编给大家分享一下vue组件之间数据传递的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!(1)props属性:在父组件中,可以通过子组件标签属性的形式将数据或者函数传给子组件,子组...
    99+
    2024-04-02
  • Vue中插件的示例分析
    这篇文章主要为大家展示了“Vue中插件的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue中插件的示例分析”这篇文章吧。以上是“Vue中插件的示例分析”这篇文章的所有内容,感谢各位的阅...
    99+
    2023-06-25
  • Javascript中JSON数据分组优化的示例分析
    小编给大家分享一下Javascript中JSON数据分组优化的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!现有一堆数据...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作