老师,子组件绑定点击事件有什么作用

来源:2-12 生命周期函数的新写法

啊聪聪

2023-03-12 14:48:15

相关代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>生命周期函数的新写法</title>
  <script src="https://unpkg.com/vue@next"></script>
  <style> 
  </style>
</head>

<body>
  <div id="root"></div> 
</body>
<script>

const app = Vue.createApp({
    // beforeMount => onBeforeMount
    // mounted => onMounted
    // beforeUpdate => onBeforeUpdate
    // beforeUnmount => onBeforeUnmount
    // unmouted => onUnmounted
    setup() {
        const {
            ref,onBeforeMount,onMounted,onBeforeUpdate,onUpdated,
            onRenderTracked, onRenderTriggered,onBeforeUnmount,onUnmounted
         } = Vue;
        const name = ref('dell');
        let show = ref(true);
        onBeforeMount(() => {
            console.log('onBeforeMount');
        });
        onMounted(() => {
            console.log('onMounted');
        });
        onBeforeUpdate(() => {
            console.log('onBeforeUpdate');
        });
        onUpdated(() => {
            console.log('onUpdated');
        });

        // 页面开始渲染时收集响应式依赖,只执行一次,局部更新不执行
        onRenderTracked(() => {
            console.log('onRenderTracked');
        });
        // 每次触发页面重新渲染时自动执行
        onRenderTriggered(() => {
            console.log('onRenderTriggered');
        });

        onBeforeUnmount(() => {
            console.log('onBeforeUnmount');
        });
        onUnmounted(() => {
            console.log('onUnmounted');
        });

        const handleClick = () => {
            name.value = 'lee';
        }

        // 通过handleHide事件控制v-if的值,从而实现销毁test组件
        const handleHide = () => {
            show.value = !show.value;
        }
        return {name,handleClick,
            show,handleHide }
    },
    template: `
        <div @click="handleClick">
            {{name}}
        </div>
        <div @click="handleHide">parent</div>
        <test v-if="show" />
    `
});

app.component('test', {
    data() {
        return {show: true}
    },
    methods: {
        handleClick() {
        this.show = !this.show;
        }
    },
    // 给子组件test上添加v-if="show"。当点击parent文字时控制添加或移出子组件,
    // 然后查看子组件对应的卸载函数执行结果
    beforeUnmount() {
        console.log('test组件 onBeforeUnmount');
    },
    unmouted() {
        console.log('test组件 onUnmounted');
    },
    template: `<div @click="handleClick">child</div>`


});



const vm = app.mount('#root');
</script>
</html>

相关截图:

https://img.mukewang.com/climg/640d758a09589d7a19120970.jpg

写回答

1回答

好帮手慕久久

2023-03-12

同学你好,解答如下:

1、子组件绑定事件后,可以通过事件向父组件传递数据。这一点,后面课程会详细讲,可以带着问题往后学习。

2、除了传递数据,还可以利用事件实现自己内部的逻辑。比如子组件里面有个列表,可以通过事件控制该列表是否显示:

https://img.mukewang.com/climg/640d7cea092e87cb07520514.jpg

祝学习愉快!

0

0 学习 · 17877 问题

查看课程