Vue 实战实用技术点,CSS复合选择器

  • 开发组件库,Element 源码用的都是 render

  • 封装一些高阶组件。组件里面嵌套组件就是高阶组件,前提是要满足组件三要素:propseventslot

  • 用于处理一些复杂的逻辑判断。如果我们一个组件里面有很多 v-if 判断的话,用模板就显得不合适了,这个时候可以用渲染函数来轻松处理

errorCaptured

===========================================================================

捕获一个来自子孙组件的错误时被调用。有时候当我们想收集错误日志,却不想把错误暴露到浏览器控制台的时候,这很有用。下面是个例子:

Child.vue

Parent.vue

关于 errorCaptured 更多说明,请 移步官网->

选项-生命周期钩子

v-once

====================================================================

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

用户协议

… a lot of static content …

只渲染元素和组件一次。随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过。这可以用于优化更新性能。关于 v-once 更多介绍,请 移步官网->

slot-scope

========================================================================

作用域插槽。vue@2.5.0 版本以前叫 scope,之后的版本用 slot-scope 将其代替。除了 scope 只可以用于 <template> 元素,其它和 slot-scope 都相同。

用过 Element 组件的同学都知道,当我们在使用 <el-table> 的时候会看到如下代码:

Element@1.4.x 的版本:

<el-button

size=“small”

@click=“handleEdit(scope.$index, scope.row)”>编辑

<el-button

size=“small”

type=“danger”

@click=“handleDelete(scope.$index, scope.row)”>删除

但在 2.0 之后的版本替换成了 slot-scope

Element@2.0.11

<el-button

size=“mini”

@click=“handleEdit(scope.$index, scope.row)”>编辑

<el-button

size=“mini”

type=“danger”

@click=“handleDelete(scope.$index, scope.row)”>删除

说白了,slot-scope 相当于函数的回调,我把结果给你,你想怎么处理就怎么处理,一切随你:

function getUserById (url, data, callback) {

$.ajax({

url,

data,

success: function (result) {

callback(result)

}

})

}

// 使用

getUserById(‘/users’, { id: 1 }, function (response) {

// 拿到数据并开始处理自己的页面逻辑

})

下面我们来简单模拟下 <el-table> 组件内部是怎么使用 slot-scope 的,看代码:

模拟的 <el-table> 组件:

// 定义模板

let template = `

    • {{ item.name }}

      `

      Vue.component(‘el-table’, {

      template,

      props: {

      data: Array,

      default: []

      }

      })

      在你需要的地方使用 <el-table> 组件:

      HTML:

      {{ scope.row.name }}

      {{ scope.row.name }}

      JavaScript:

      new Vue({

      el: ‘#app’,

      data: {

      userData: [

      {id: 1, name: ‘张三’, isActived: false},

      {id: 2, name: ‘李四’, isActived: false},

      {id: 1, name: ‘王五’, isActived: true},

      {id: 1, name: ‘赵六’, isActived: false},

      ]

      }

      })

      CSS:

      .red {

      color: red

      }

      你可以狠狠的 戳这里 查看上面的效果!最后,我们再使用 render 函数来重构上面的代码:

      JavaScript:

      // <el-table> 组件

      Vue.component(‘el-table’, {

      name: ‘ElTable’,

      render: function (h) {

      return h(‘div’, {

      class: ‘el-table’

      }, this.$slots.default)

      },

      props: {

      data: Array

      }

      })

      // <el-table-column>

      Vue.component(‘el-table-column’, {

      name: ‘ElTableColumn’,

      render: function (h) {

      // 定义一个存放 li 元素的数组

      let lis = [],

      // 获取父组件中的 data 数组

      data = this.$parent.data

      // 遍历数组,也就是上面的 v-for,生成 <li> 标签

      // this.$scopedSlots.default 获取的就是上面 slot-scope 作用于插槽的部分,

      // 并把 { row: item } 传给上面的 scope 变量

      data.forEach((item, index) => {

      let liEl = h(‘li’, {

      key: item.id

      }, [ this.$scopedSlots.default({ row: item }) ])

      // 把生成的 li 标签存到数组

      lis.push(liEl)

      })

      return h(‘ul’, {

      class: ‘el-table-column’

      }, lis)

      }

      })

      在你的页面这样来使用:

      HTMl:

      {{ scope.row.name }}

      {{ scope.row.name }}

      JavaScript:

      new Vue({

      小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

      深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
      因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

      img
      img
      img
      img

      由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

      如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
      img

      React

      • 介绍一下react

      • React单项数据流

      • react生命周期函数和react组件的生命周期

      • react和Vue的原理,区别,亮点,作用

      • reactJs的组件交流

      • 有了解过react的虚拟DOM吗,虚拟DOM是怎么对比的呢

      • 项目里用到了react,为什么要选择react,react有哪些好处

      • 怎么获取真正的dom

      • 选择react的原因

      • react的生命周期函数

      • setState之后的流程

      • react高阶组件知道吗?

      • React的jsx,函数式编程

      • react的组件是通过什么去判断是否刷新的

      • 如何配置React-Router

      • 路由的动态加载模块

      • Redux中间件是什么东西,接受几个参数

      • redux请求中间件如何处理并发

      开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

      如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
      [外链图片转存中…(img-D7oadnXZ-1710695041923)]

      React

      • 介绍一下react

      • React单项数据流

      • react生命周期函数和react组件的生命周期

      • react和Vue的原理,区别,亮点,作用

      • reactJs的组件交流

      • 有了解过react的虚拟DOM吗,虚拟DOM是怎么对比的呢

      • 项目里用到了react,为什么要选择react,react有哪些好处

      • 怎么获取真正的dom

      • 选择react的原因

      • react的生命周期函数

      • setState之后的流程

      • react高阶组件知道吗?

      • React的jsx,函数式编程

      • react的组件是通过什么去判断是否刷新的

      • 如何配置React-Router

      • 路由的动态加载模块

      • Redux中间件是什么东西,接受几个参数

      • redux请求中间件如何处理并发

      开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

    • 11
      点赞
    • 7
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值