vue3子组件修改父组件传递的props时出现奇怪的问题?

新手上路,请多包涵

问题描述

编写树形结构组件碰到的问题。父组件传递的数据是没有控制样式的这些属性的。子组件在接受数据后增加了一些控制样式的属性。但是在修改这些增加的属性时控制台报错。

相关代码

父组件

<template>
    <view>
        <MemberTree :data="meta"></MemberTree>
    </view>
</template>

<script setup>
    import {
        reactive
    } from "vue";

    import MemberTree from "./components/MemberTree.vue"

    const meta = reactive({
        name: '111',
        children: [{
                name: 1222,
                children: [{
                        name: 12221,
                        children: [{
                            name: 122211,
                            children: []
                        }, ]
                    },
                    {
                        name: 12222,
                        children: []
                    },
                    {
                        name: 12223,
                        children: []
                    },

                ]
            },
            {
                name: 1333,
                children: []
            },
            {
                name: 1444,
                children: []
            },
        ]
    })
</script>

<style>

</style>

子组件

<template>
    <view class="member-tree">
        <view class="name" @click="handleFoldChange(cell)">
            <view class="iconfont icon-right" :class="{rotate: !cell.fold}"></view> {{cell.name}}
        </view>
        <view v-if="cell.children.length && !cell.fold" class="children pdl30">
            <MemberTree v-for="item in cell.children" :cell="item" @change-fold="handleFoldChange(item)"></MemberTree>
        </view>
    </view>
</template>

<script setup>
import { reactive } from "vue";
    const props = defineProps(['data'])
    const emit = defineEmits(['change-fold'])
    
    function addStylesControl(cell) {
        console.log('cell', cell);
        cell.selected = 0
        cell.fold = true
        console.log(cell.children);
        if (cell.children.length) {
            for (let item of cell.children) {
                addStylesControl(item)
            }
        }
        return cell
    }
    
    const cell = addStylesControl(props.data)
    
    function handleFoldChange(data) {
        console.log('data', data.fold);
        debugger
        data.fold = false
    }
    
</script>

<style lang="scss">
    .children {
        border-left: 1px solid #999;
    }
    
    .name {
        display: flex;
    }
    
    .rotate {
        transform: rotate(90deg);
        transition: transform 100ms ease-in-out;
    }
</style>

控制台报错

问题出现的环境背景及自己尝试过哪些方法

这个属性可以在控制台打印出来,但是修改的时候却又找不到了。

阅读 2.2k
2 个回答
✓ 已被采纳新手上路,请多包涵

image.png

自问自答,:data错换成了:cell,下面的代码是正确的。

image.png
这里的形参换个名字

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题