render函数封装

另类组件封装

  • 以render函数封装

    render:为了创建虚拟dom,它return什么,页面就渲染什么,它return的值也要是虚拟dom

  1. 封装一个面包屑item项组件,接收一个to参数
<template>
  <span>
    <router-link v-if="to" :to="to">
      <slot />
    </router-link>
    <span v-else><slot /></span>
  </span>
</template>
<script>
export default {
  name: 'BreadcrumbItem',
  props: {
    to: {
      type: [Object, String],
      default: ''
    }
  }
}
</script>
<style></style>
  1. 使用面包屑item组件
<template>
  <div>
    <Breadcrumb>
      <BreadcrumbItem to="/">首页</BreadcrumbItem>
      <BreadcrumbItem to="/departments">活动列表</BreadcrumbItem>
      <BreadcrumbItem>活动详情</BreadcrumbItem>
      <BreadcrumbItem>活动详情</BreadcrumbItem>
      <BreadcrumbItem>活动详情</BreadcrumbItem>
      <BreadcrumbItem>活动详情</BreadcrumbItem>
    </Breadcrumb>
    <!-- <HmMessage /> -->
  </div>
</template>
<script>
export default {}
</script>
<style></style>
  1. 封装render函数
    在这里插入图片描述
<script>
export default {
  name: 'Breadcrumb',
  functional: true,
  render: (h, context) => {
    //   context.slots().default获取默认插槽内的虚拟dom,它是一个数组
    console.log('context', context.slots().default)
    //  <i class="el-icon-arrow-right" />  h('i',{class:'el-icon-arrow-right'})
    const vnodeArr = []
    context.slots().default.forEach((item, index, arr) => {
      vnodeArr.push(item)
      //   不是最后一项时才添加  >  图标
      if (arr.length - 1 !== index) {
        vnodeArr.push(h('i', { class: 'el-icon-arrow-right' }))
      }
    })
    return h('span', {}, vnodeArr)
  }
}
</script>
<style></style>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值