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

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 基于单片机的靶位控制系统
  • ¥15 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错