vue实战问题1:vue组件beforeUpdate和updated生命周期钩子不执行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue实战问题1:vue组件beforeUpdate和updated生命周期钩子不执行相关的知识,希望对你有一定的参考价值。

参考技术A         前段时间遇到的一个问题,项目是由支付宝小程序移植过来的vue项目,将didUpdate更换成了updated,跑起来后发现updated生命周期钩子没有执行。

        组件通信使用的就是普通的父子组件的传值,当时以为是父组件上的数据没有更新,所以导致updated没有执行,不过后来发现父组件的值改变了,但是updated没有执行。找了下官方文档,发现文档中提到了这个坑。

        updated可能并不会执行,最好的还是使用计算属性或者用watch监听数据变化

        以为差不多这样就可以了,后来随着测试的加深,一般监听时是不能监听到对象属性值的变化的,发现如果监听的是Object类型的复杂数据类型的话,这样写是无法监听key和value的变化的,需要对Object类型进行深层监听

这样的话,基本上就解决了vue组件beforeUpdate和updated生命周期钩子不执行的问题

Vue 开发实战基础篇 # 3:Vue组件的核心概念:事件

说明

【Vue 开发实战】学习笔记。

事件

vue 提供了一个简单的方式进行绑定事件,就是使用 @xxx 就可以进行事件绑定,这里以 click 事件为例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue组件的核心概念:事件</title>
</head>
<body>
    <div id="app">
        message
        <ul>
            <todo-item v-for="item in list" :title="item.title" :del="item.del"></todo-item>
        </ul>

        <todo-list></todo-list>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        // 定义一个名为 todo-item 的组件;名字需要唯一
        Vue.component("todo-item", 
            props: 
                title: String,
                del: 
                    type: Boolean,
                    default: false
                
            ,
            template: `
                <li>
                    <span v-if="!del">title</span>
                    <span v-else style="text-decoration: line-through;">title</span>
                    <button v-show="del" @click="handleClick">删除</button>
                </li>
            `,
            // data 需要为函数返回一个对象,保证唯一性
            data: function() 
                return 
            ,
            methods: 
                handleClick() 
                    console.log('点击了删除按钮');
                    // 发射时间出去
                    this.$emit("delete", this.title);
                
            ,
        );
        // 定义一个名为 todo-list 的组件
        Vue.component("todo-list", 
            template: `
                <ul>
                    <todo-item v-for="item in list" :title="item.title" :del="item.del" @delete="handleDelete"></todo-item>
                </ul>
            `,
            data: function() 
                return 
                    list: [
                        
                            title: "课程3",
                            del: true
                        ,
                            title: "课程4",
                            del: false
                        ,
                    ]
                
            ,
            methods: 
                handleDelete(val) 
                    console.log('handleDelete---->', val);
                
            
        );

        var vm = new Vue(
            el: "#app",
            data: 
                message: "kaimo 313",
                list: [
                    
                        title: "课程1",
                        del: true
                    ,
                        title: "课程2",
                        del: false
                    ,
                ]
            
        )
    </script>
</body>
</html>

然后点击删除按钮,结果如下

以上是关于vue实战问题1:vue组件beforeUpdate和updated生命周期钩子不执行的主要内容,如果未能解决你的问题,请参考以下文章

Vue实战Vue开发中的的前端代码风格规范

Vue+element项目实战

Vue 开发实战学习笔记48篇(完结)

猿创征文Vue3 企业级优雅实战 - 组件库框架 - 7 组件库文档的开发和构建

详解Vue生命周期---1

Vue 开发实战基础篇 # 2:组件基础及组件注册