Vue中子组件props接受父组件传递的值,能不能修改?

发布时间:2024-01-21 19:01:50

Vue中子组件props接受父组件传递的值,能不能修改?

总结

如果props的数据为对象和数组,是可以直接修改,也不会有报错提示,但是不提倡。
因为我传进来的list是个数组,属于引用类型,修改子组件相当于把父组件也同时修改了,所以没有报错,
如果是个基本类型的数据直接修改那么vue会报错。

父子组件传值时,父组件传递的参数,数组和对象,子组件接受之后可以直接进行修改,并且会传递给父组件相应的值也会修改。
如果传递的值是字符串,直接修改会报错。
不推荐子组件直接修改父组件中的参数,避免这个参数多个子组件引用,无法找到造成数据不正常的原因

原因

单向数据流
所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外变更父级组件的状态,从而导致你的应用的数据流向难以理解。

额外的,每次父级组件发生变更时,子组件中所有的 prop 都将会刷新为最新的值。这意味着你不应该在一个子组件内部改变 prop。如果你这样做了,Vue 会在浏览器的控制台中发出警告。
————————————————

1. sync修饰符

Vue中的数据是单向数据流:父级 prop 的更新会向下流动到子组件中,但是反过来则不行,即子组件无法直接修改父组件中的数据。
但我们常常会遇到需要在子组件中修改父组件数据的场景。.sync修饰符就可以帮助我们实现这种功能。

1.父组件

  //:is-show.sync="detailVisible"
 <WriteOffDialog :visible.sync="writeOffShow" ></WriteOffDialog>

2.子组件

  cancel() {
      this.$emit('update:visible', false)
      //this.$emit('update:isShow', false)
      // 或者如下也可以
      //this.$emit('update:is-show', false)
      },

或者

// 父组件
<todo-list :list.sync="list" />
 
// 子组件
methodName(index) {
    this.$emit('update:list', this.newList)
}

二、子组件深拷贝

在子组件修改props的方法:

//1. 子组件data中拷贝一份,注意引用类型需要深拷贝,根据需求可以watch监听

data() {
    return {
        newList: this.list.slice()
    }
},
watch: {
    list(newVal) {
        this.newList = newVal
    }
}
// 2. 通过计算属性修改
computed: {
    nList() {
        return this.list.filter(item => {
            return item.isChecked
        })
    }
}

链接: https://www.jianshu.com/p/db0c334e21b1.
链接: https://blog.csdn.net/weixin_62277266/article/details/123392861
链接: https://blog.csdn.net/michiko98/article/details/118372328?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3-118372328-blog-123392861.pc_relevant_downloadblacklistv1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3-118372328-blog-123392861.pc_relevant_downloadblacklistv1&utm_relevant_index=6
链接: https://wenku.baidu.com/view/5981ba3aa11614791711cc7931b765ce05087ab6.html
链接: https://blog.csdn.net/BoZai_ya/article/details/125300036

文章来源:https://blog.csdn.net/MISS_zhang_0110/article/details/122478613
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。