vue3 如何通过父组件操作【数组】控制子组件?

发布于 2022-09-13 00:33:30 字数 1497 浏览 22 评论 0

目前用父组件调用了子组件,传递参数 buttonData

<bottomNavigation :buttonData="buttonData"></bottomNavigation>

buttonData 数据结构为

const buttonData:Array<BarButton> = [
    {
        name: NameEnum.BUTTON1,
        showName:"按钮1",
        clickFunction: () => {
            console.log("Btn pushed");
        },
        showType: ShowTypeEnum.normal
    }, {
        name:  NameEnum.BUTTON2,
        showName: "按钮2",
        clickFunction: () => {
            console.log("Btn pushed");
        },
        showType: ShowTypeEnum.normal
    }
];

在子组件中, html 元素根据上文数组的内容进行渲染。

  <div class="bar-content">
    <div class="navigation-btn navigation-btn-normal" @click="item.clickFunction" v-for="(item, index) in buttons"
         :key="index">
      {{ item.showName }}
    </div>
  </div>

现在的问题是,我想通过父组件操作 buttonData ,来控制子组件的内容,但是目前无论怎么操作数组,子组件都不会改变。已验证 props 的数据和 ref 的数据改变了,只是视图没有重新渲染。
以下是子组件尝试通过监听处理 props 的代码:

  setup(props) {
    const buttons = computed(()=> {
      return props.buttonData as Array<BarButton>
    })
    watch(toRefs(props.buttonData as Array<BarButton>),(val)=>{
      console.log("watching",val)
    },{deep:true,immediate:true})
    return {
      buttons
    }
  }

如果问题描述不清,可以直接查看 github 上的源码:
https://github.com/nullpointe...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

黑白记忆 2022-09-20 00:33:30

一开始钻牛角尖了,要操作 reactive 对象才能监听,所以传一个普通对象当 props 就不对,直接在外部就把对象用 reactive 包好传进去就是了。

君勿笑 2022-09-20 00:33:30

你的数据没有用reactive处理是它怎么监听呢

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文