vue3 composition API 如何优雅的获取到嵌套组件的refs?

最近在学习vue3.X 找到一个以前2.x的项目自己改成3.x的编写方式
现在遇到一个问题 希望大佬们帮忙解惑

首页结构大概是这样的

home

<tabs v-for="v in arr">
    <hot-product :list="v.content">

    </hot-product>
</tabs>

这里tabs的切换会触发一个hotProduct下cell组件的方法

hot-product

<div v-for="item in list">
    <cell>
</div>

cell组件上有个function 需要拿到ref调用
以前2.x的写法是在mixin里去拿ref
然后首页注册minxins 调用 这样 不同页面的页面只要是这样的逻辑都可复用

现在3.x以后 ref的写法变成

hot-product

<cell :ref="el => getCurRefs(`${refName}-${index}`,el)"></cell>

<scrpit setup>
const refArr = reactive([])
const getCurRefs = (key,dom) => {
  refArr[key] = dom
}
</scrpit>

这样这个dom就只能在hot-product中才能使用 我试过把refArr提取出去 但是状态不是共享的

官网上有共享状态的说明

用响应式 API 做简单状态管理#
如果你有一部分状态需要在多个组件实例间共享,你可以使用 reactive() 来创建一个响应式对象,并将它导入到多个组件中:
// store.js
import { reactive } from 'vue'

export const store = reactive({
  count: 0
})

这不是我想要的效果.. 我想要的就类似mixin一样 对引入的页面来说 状态是共享的 而不是任何引入的页面都共享一个状态
大概率是姿势错误 希望大佬们解惑

阅读 2.5k
1 个回答

defineExpose,把refArrexpose出去,这样Home页面就能通过hot-product拿到了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题