明致成 2022-03-30 21:58 采纳率: 100%
浏览 290
已结题

vue3父子组件引入同一个hooks,父组件更新list数据后,子组件模板没有更新?

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图

Home.vue

<template>
    <el-button @click="filterFromHome()">filterFromHome</el-button>
    <Test></Test>
</template>

<script>
    import Test from "./Test.vue"
    import useTest from "@/hooks/useTest"
    import {toRefs} from "vue"

    export default {
        name: 'Home',
        components: {Test},

        setup() {

            const {filterFromHome} = useTest()

            return {
                filterFromHome
            }
        }
    }
</script>

<style scoped>

</style>

useTest.js

/**
 * Created by baidm in 2022/3/30 on 20:13
 */
import {reactive, watch} from "vue"

export default function () {

    let arr = _.map(new Array(100), (item, index) => {
        return {
            id: index + 1,
            name: `test${index + 1}`,
        }
    })
    const info = reactive({
        list: arr,
        sourceList: arr
    })

    watch(info, (val, oldVal) => {
        info.list = val.list
        console.log("useTest.js", val);
    })

    const filterFromHome = () => {
        info.list = _.filter(info.sourceList, item => item.id <= 50)
        console.log("Home.vue", info);
    }

    const filterInfoList = (row) => {
        info.list = _.filter(info.sourceList, item => item.id <= row.id)
    }

    return {
        info,
        filterInfoList,
        filterFromHome
    }
}

Test.vue

<template>
    <div class="test">
        <p v-for="item in info.list" :key="item.id" @click="filterInfoList(item)">
            name:{{item.name}}
        </p>
    </div>
</template>

<script>
    import useTest from "@/hooks/useTest"
    import {watch, toRefs} from "vue"

    export default {
        name: "Test",
        setup() {
            const {info, filterInfoList} = useTest()

            watch(info, (val) => {
                console.log("Test.vue", val);
            })

            return {
                info,
                filterInfoList,
            }
        }
    }
</script>

<style scoped>
    .test {
        border: 1px solid #333;
    }
    .test p {
        cursor: pointer;
    }
</style>


运行结果及报错内容

点击按钮 filterFromHome 后,子组件模板未更新??

我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

3条回答 默认 最新

  • 前端-海鸟 2022-03-31 00:54
    关注

    你的usetest是一个函数,在home和test中分别调用,生成的是两个实例,是没有关联的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月11日
  • 已采纳回答 4月3日
  • 创建了问题 3月30日

悬赏问题

  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error