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

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 用Multisim设计汽车尾灯控制电路
  • ¥15 关于#java#的问题,请各位专家解答!(开发工具-eclipse)
  • ¥100 求用matlab求解上述微分方程的程序代码
  • ¥15 MAC安装佳能LBP2900驱动的网盘提取码
  • ¥400 微信停车小程序谁懂的来
  • ¥15 ATAC测序到底用什么peak文件做Diffbind差异分析
  • ¥15 安装ubantu过程中第一个vfat 文件挂载失败
  • ¥20 GZ::CTF如何兼容一些靶机?
  • ¥15 etcd集群部署问题
  • ¥20 谁可以帮我一下问一下各位