Vue 实战实用技术点

export default {

created: [

function one () {

console.log(1)

},

function two () {

console.log(2)

}

]

}

没什么用,知道就行了。事实上生命周期钩子还可以作用于 DOM 元素上,利用这一点,我们可以用父组件中的方法来初始化子组件的生命周期钩子:

I'm child!

<child @hook:created=“handleChildCreated”>

其他钩子雷同,不再赘述。

v-for

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

在用 v-for 遍历数组的时候,我们一般都会错误的这样去做,举个栗子:

v-forv-if 放在同一个元素上使用:

    v-for=“(user, index) in users”

    v-if=“user.isActive”

    :key=“user.id”>

    {{ user.name }}

    由于 v-forv-if 放在同一个元素上使用会带来一些性能上的影响,官方给出的建议是在计算属性上过滤之后再进行遍历。所以平时开发不推荐一起使用,知道有这回事即可,不至于面试时不知道。 关于为什么不推荐放在一起使用,参见 避免-v-if-和-v-for-用在一起

    render 函数

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

    下面是一段简单的 template 模板代码:

    title

    this is content

    我们用 渲染函数 来重写上面的代码:

    export default {

    render (h) {

    let _c = h

    return _c(‘div’,

    { class: ‘box’},

    [_c(‘h2’, {}, ‘title’), ‘this is content’])

    }

    }

    事实上,Vue 会把模板(template)编译成渲染函数(render),你可以通过一个在线工具 实时查看编译结果。上面的 template 模板会被编译成如下渲染函数:

    let render = function () {

    return _c(‘div’,

    {staticClass:“box”},

    [_c(‘h2’, [_v(“title”)]), _v(“this is content”)])

    }

    是不是很像? 正如官方说的,渲染函数比 template 更接近编译器。如果用一个流程图来解释的话,大概是这个样子:

    template

    预编译工具(vue-loader + vue-template-compile)

    render

    resolve vnode

    具体参见 Vue声明周期图示

    渲染函数用处:

    • 开发组件库,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> 标签

        最后

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

        深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

        因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

        img

        既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

        如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

        由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
        // 定义一个存放 li 元素的数组

        let lis = [],

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

        data = this.$parent.data

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

        最后

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

        深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

        因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

        [外链图片转存中…(img-KT22OpXt-1715655153685)]

        [外链图片转存中…(img-s4zTFMQV-1715655153686)]

        [外链图片转存中…(img-PW0lWNTB-1715655153686)]

        既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

        如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

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

      • 4
        点赞
      • 3
        收藏
        觉得还不错? 一键收藏
      • 0
        评论
      评论
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

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

      抵扣说明:

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

      余额充值