Vue3setup的参数说明

setup的两个参数

setup包含两个参数,一个为props、一个为context (均为形参)

    • props:值为对象,包含:组件外部传递过来,且组件内部声明接收了的属性。
    • context:上下文对象
<script>
    export default {
        name:'Child',
        setup(props,context){

        }
    }
</script>

在说明这两给参数之前,,我们需要回顾一下Vue2的知识

vue2中的$attrs

我们向Demo组件传递msg和school属性

如果我们在子组件中使用props声明接收并打印当前实例vc对象

export default {
  props:['msg','school'],
  mounted() {
    console.log(this)
  }
}

我们可以发现这个实例对象vc上有msg和shcool属性,$attrs这个对象为空

因此,我们可以在demo组件直接通过 { { msg } } 的方式使用接收到的参数

如果,我们在子组件中不使用props声明接收,打印当前实例vc对象

export default {
  //props:['msg','school'],
  mounted() {
    console.log(this)
  }
}

我们可以发现,vc实例上没有 msg 和 school 这两个属性了。

但是,打开 a t t r s ,我们会惊奇的发现,即使子组件没有声明接受,父组件传递的参数也会被 attrs,我们会惊奇的发现,即使子组件没有声明接受,父组件传递的参数也会被 attrs,我们会惊奇的发现,即使子组件没有声明接受,父组件传递的参数也会被attrs所捕获

这也意味着即使我们不声明参数的接收,也可以直接在子组件中使用 { {$attrs.msg } }的方式使用参数,但,这确实还是比较麻烦的。

综上,我们可以知道

子组件声明接收的参数,会直接挂载在vc实例上;而子组件未声明接收参数,会储存在 $attrs 中。

Vue2中的$slots

我们在父组件中使用demo组件

<template>
  <div>
    <h1>我是Vue2写的效果<h1>
    <Demo></Demo>
  </div>
</template>

打印子组件的实例对象vc

<template>
  <div>
    我是Demo组件
  </div>
</template>
export default {
  mounted() {
    console.log(this)
  }
}

可以发现,子组件的实例对象vc上的$slots属性为空

如果我们在demo标签之间写一点东西

<template>
  <div>
    <h1>我是Vue2写的效果<h1>
    <Demo>
       <span>你好啊<span1>
    </Demo>
  </div>
</template>

这时,我们打印一下子组件的实例对象v会惊喜的发现,$slots上存放了我们传入的虚拟节点(Vnode)

这个时候,如果我们在子组件中定义了插槽,这些虚拟节点就会渲染在插槽出现的位置

<template>
  <div>
    我是Demo组件
    <slot></slot>
  </div>
</template>
export default {
  mounted() {
    console.log(this)
  }
}

当然,即使不定义插槽,标签之间的虚拟节点也都会存放在$slots属性上。

1、props参数详解

APP.vue(父组件)

<template>
	<div class="app">
		<h3>我是App组件</h3>
		<Child :name ="提姆" age="9"></Child>
	</div>
</template>
<script>
	import Child from './components/Child.vue'//静态引入
	export default {
		name:'App',
		components:{Child},  //组件写法不变
	}
</script>

Child.vue(子组件)

<template>
    <div class="child">
        子组件
        <span>{{ name }}</span>
        <span>{{ age }}</span>
    </div>
</template>

<script>
    export default {
        name:'Child',
        // props:["name","age"],    //组件的props参数同vue2
        setup(props,context){
           console.log(props)
           console.log(context)
        // console.log(context.attrs)
        }
    }
</script>

如上图,如果props不声明接收(被注释),则setup的第一个参数为空,但context内可以找到相关值。

声明props后,即去掉注释后,

2、slots参数详解

      • attrs: 值为对象,包含:组件外部传递过来,但没有在props配置中声明的属性, 相当于 this.$attrs。
      • slots: 收到的插槽内容, 相当于 this.$slots。
      • emit: 分发自定义事件的函数, 相当于 this.$emit。

3、emit参数详解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3中,`watch` 是用于监听响应式数据变化的一种方法。它允许你在数据变化时执行一些操作,例如更新组件、触发计算属性或执行异步任务等。 使用 `watch` 的基本语法如下: ```javascript watch( callback: () => void, options: { deep?: boolean, immediate?: boolean, handler: () => void } ) ``` 参数说明: * `callback`:一个函数,当响应式数据发生变化时会被调用。 * `options`:可选参数,用于指定观察选项。 + `deep`:一个布尔值,指定是否深度监听对象的变化。默认为 `false`,只监听基本类型(如字符串、数字、布尔值)的变化。如果设置为 `true`,则将深度监听对象及其属性。 + `immediate`:一个布尔值,指定是否立即执行回调函数。默认为 `false`,只有在第一次观察时才会执行。如果设置为 `true`,则在数据首次变化时立即执行回调函数。 * `handler`:回调函数内部的代码,当响应式数据发生变化时会被执行。 使用 `watch` 的示例代码: ```javascript import { ref, watch } from 'vue'; const count = ref(0); const multiplier = 2; watch(() => count, (newCount) => { console.log(`Count changed to ${newCount}`); console.log(`Multiplier is ${multiplier}`); console.log(`New value: ${newCount * multiplier}`); }); // 在此处修改 count 的值以触发回调函数 count.value = 5; // 输出: Count changed to 5, Multiplier is 2, New value: 10 ``` 在上面的示例中,我们使用 `watch` 监听 `count` 响应式数据的变化,并在每次变化时执行回调函数。回调函数中输出了当前计数、乘数和新值。 需要注意的是,从Vue 3开始,推荐使用 `setup` 函数和 `onMounted`、`onUpdated`等生命周期钩子函数来代替旧版本的 `watch` 方法。这样可以更好地管理组件的状态和行为,提高代码的可维护性和可读性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值