求教 vue3 下路由传参给子组件后,子组件列表如何能实时渲染

2022-12-05 11:47:28 +08:00
 juventusryp

描述:

// message.vue
<template>
  <li v-for="m in messageList" :key="m.id">
    <router-link
      :to="{ name: 'Detail', query: { id: m.id, title: m.title } }"
      >{{ m.title }}</router-link
    >
    <button @click="pushShow(m)">push 查看</button>
  </li>
  <hr />
  <router-view></router-view>
</template>

<script setup lang="ts">
import { ref, reactive } from "vue";
import { useRoute, useRouter } from "vue-router";
let messageList = [
  { id: "004", title: "message004" },
  { id: "005", title: "message005" },
  { id: "006", title: "message006" },
];

const router = useRouter();

const pushShow = (m: { id: string; title: string }) => {
  router.push({ name: "Detail", query: { id: m.id, title: m.title } });
};
</script>

<style scoped lang="less"></style>

// detail.vue
<template>
  <li v-for="m in messageList" :key="m.id">
    {{ m.title }}
  </li>
</template>

<script setup lang="ts">
import { ref, reactive, onMounted } from "vue";
import { useRoute } from "vue-router";

let messageList = reactive([
  { id: "001", title: "message001" },
  { id: "002", title: "message002" },
  { id: "003", title: "message003" },
]);

const route = useRoute();
</script>

<style scoped lang="less"></style>

583 次点击
所在节点    问与答
4 条回复
sjhhjx0122
2022-12-05 13:47:46 +08:00
最简单的就是,messageList 并不在 detail 里维护,detail 只渲染单条,在 message.vue 维护 messageList ,然后循环 detail props 传入单条数据
leoQaQ
2022-12-05 14:16:39 +08:00
用 watch ?
hevi
2022-12-05 14:38:13 +08:00
onMounted 的时候,把传进来的值 push ,然后消除 query
或者 watch ,push 后消除 query
yigecaiji
2022-12-05 15:15:07 +08:00
不用 push ,用 set ?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/900166

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX