我对VueJS的警告感到困惑

[Vue警告]:避免直接改变道具,因为只要父组件重新渲染,该值就会被覆盖 . 而是根据prop的值使用数据或计算属性 . 支持变异:"moduleSpecificProps"

这段代码不是一个有效的代码;对不起有点懒 . 关键是我有一个子模块,它将接受一个属性(moduleSpecificProps) . 因此,如果父传递它,子将使用值(tableData:computed属性),否则它将使用默认值 .

  • 但我的问题是,如果我想更改子组件内的计算属性的值,我该怎么办?

  • 我应该保留另一个数据字段tableDataCurrentValue并更新它并从tableDataCurrentValue数据字段派生(计算属性)值吗?

I am having a thought like this way

  • 子组件将具有两个数据字段'default_table_data'和'tableDataHolder' .

  • 并且当更改发生时我将更新“tableDataPols”并更新'tableDataHolder'

  • 计算属性'tableData'将从'tableDataHolder'返回(获取)数据,如果没有找到则使用'default_table_data'

  • 在为计算属性'tableData'赋值(试图更新值的子组件)时,它将更新'tableDataHolder'这似乎有效,但不确定使用 Watch 是否良好,似乎总是在观察结束 .

//子组件

<template>
</template>

<script>
    {
        props: {
            moduleSpecificProps: {
                type: Object,
                required: false
            }
        },
        data() {
            return {
                default_table_data: {
                    name: 'User Data',
                    columns: [{'name': 'User id'}, {'name': 'Name'}],
                    data: []
                }
            }
     },
     computed: {
        tableData: {
            get: function() {
                var tableData_temp = this.default_table_data
                tableData_temp['name'] = this.moduleSpecificProps['tableData']['name'] || this.default_table_data['name']
                tableData_temp['columns'] = this.moduleSpecificProps['tableData']['columns'] || this.default_table_data['columns']
                tableData_temp['data'] = this.moduleSpecificProps['tableData']['data'] || this.default_table_data['data']
                return tableData_temp
            },
            set: function(tableData) {
                var tableDataOld = this.tableData
                tableDataOld['name'] = tableData['name'] || tableDataOld['name']
                tableDataOld['columns'] = tableData['columns'] || tableDataOld['columns']
                tableDataOld['data'] = tableData['data'] || tableDataOld['data']
                this.moduleSpecificProps['tableData'] = tableDataOld
            }
        }
    }
  }
</script>

并且父脚本可以像这样定义子实例:

childConfig = {
    name: 'Student Mark Data',
    columns: [{'name': 'Student Name'}, {'name': 'Mark'}],
    data: [] 
}
<template>
    <child :moduleSpecificProps="childConfig"></child>
</template>