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

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条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

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

      悬赏问题

      • ¥15 如何在linux服务器做视频静态资源访问接口
      • ¥15 Python Xpath对<em>标签的爬取结果变成了- -(关键词-Xpath)
      • ¥15 el-cascader懒加载模式选中单选框加载下层无数据问题
      • ¥15 promql 参数怎么忽视大小写查询
      • ¥50 swift使用textkit读取大文本文件速度慢的问题
      • ¥20 统信linux360企业浏览器 如何配置扩展程序?(图形界面我知道)
      • ¥100 c/c++实现DoubleArrayTrie
      • ¥15 在开发/迭代一款企业信息软件时会耗费你们多长时间?
      • ¥15 如果可以为你提供一款定制化的企业软件,您最希望在哪个板块实现定制化?
      • ¥30 关于#网络安全#的问题:非对称加密验证