这里是完整的目录图片,由于整篇文章篇幅太长,拆分成了几篇来展示

4. context 之 slots 和 attrs
setup() 中的 context参数
我们都知道在 Vue3 语法当中 setup() 的第一个参数是 props,第二个参数是 context
props 用 defineProps API 来替换掉了
而 context 是一个对象,并且这个对象中有三个属性,分别是 attrs, slots, emit
当我们需要事件派发的时候,直接使用 emit 就可以了
那么 setupContext.attrs 以及 setupContext.slots 在 script setup 语法当中应该怎样使用呢?
在
<script setup>
import {
useSlots, useAttrs } from 'vue'
const slots = useSlots()
const attrs = useAttrs()
</script>
useSlots 和 useAttrs 是真实的运行时函数,它的返回与 setupContext.slots 和 setupContext.attrs 等价。
它们同样也能在普通的组合式 API 中使用。
已经弃用的 useContext()
在查找相关资料的时候有看到关于 useContext() 的用法 (可以通过 useContext() 从上下文中获取 emit slots 和 attrs),但是现在关于 useContext 已经弃用了,废除了这个语法,被拆分成上面的 useAttrs 和 useSlots
以下图片来自别的参考资料,但是现在已经弃用了

测试使用报错 : The requested module '/node_modules/.vite/deps/vue.js?v=8da96c73' does not provide an export named 'useContext' (at child.vue:6:33)
<!-- 已弃用 -->
<script setup>
import {
useContext } from "vue";
const {
slots, attrs } = useContext();
</script>


5. defineExpose()
Vue 3 可以利用 expose 结合 ref 来让父组件使用子组件的数据 ( 可以对数据进行修改 )和方法
在 Vue 3 的新特性中,如

文章介绍了Vue3中setup函数的props和context参数变化,使用useSlots和useAttrs替代了context中的slots和attrs。同时,文章指出useContext已被弃用,推荐使用单独的useSlots和useAttrs。另外,文章详细阐述了defineExpose的作用,即在scriptsetup语法糖中如何暴露子组件的数据和方法给父组件使用,以及expose选项的使用策略。
最低0.47元/天 解锁文章
995

被折叠的 条评论
为什么被折叠?



