修改单向数据流传递过来的值

什么是单向数据流?

  • 父级 prop 的更新会向下流动到子组件中,每次父级组件发生更新时,子组件中所有的 prop 都将会刷新为最新的值 众所周知,众所周知,vue是单向数据流,一般我们也不会在子组件里面修改父组件传进来的值。但是总有意外的时候:
  • 当子组件接收父组件传递过来的是基本类型的数据的时候,修改会触发报错
  • 如果接收的是引用类型,修改不会报错,因为修改引用类型相当于在父组件修改数据

那应该怎么修改呢?以数组为例

  • data中拷贝一份,注意引用类型需要深拷贝,根据需求可以watch监听
data() {
    return {
        newList: this.list.slice()
    }
},
watch: {
    list(newVal) {
        this.newList = newVal
    }
}
1
2
3
4
5
6
7
8
9
10
  • 通过计算属性修改
computed: {
    nList() {
        return this.list.filter(item => {
            return item.isChecked
        })
    }
}
1
2
3
4
5
6
7
  • sync修饰符 父组件 传进去的时候加上 .sync

子组件 通过this.$emit(‘update:xxx’, params)

// 父组件
<todo-list :list.sync="list" />
 
// 子组件
methodName(index) {
    this.$emit('update:list', this.newList)
}
1
2
3
4
5
6
7
最近更新时间: 2021/08/25 09:25:09
最近更新
01
2025/07/18 00:00:00
02
2025/05/05 00:00:00
03
2025/05/01 00:00:00