关于vue的单项数据流和组件热更新的问题

父组件 利用props传递数组arrray的第一个元素给 子组件,array = [true, true, true]

情况一

父组件click事件分别执行this.array.push【数组方法修改,首值不变,地址不变】和this.array = [true, false, false]【重新赋值,首值不变,地址改变】都无法使得子组件重新渲染

情况二

父组件click事件执行this.array = [false, true,true]【首值改变,数组地址不变】,子组件重新渲染,这时子组件方法修改props会报错

推断(不一定正确)

props只有值发生变化在会引发重渲染,data值或地址发生变化都会引发重渲染

 

问题场景

将props传递的值给某ui组件,用于控制组件的展开或关闭,ui组件能够改变props但却不会报错(???),查看父组件发现其值并未改变,类似于子组件利用props产生了一个自己作用域的变量,却无法改变父组件的值,所以会出现父组件传递true,子组件获得true,但子组件将true改为false不报错且父组件任然为true

业务需要props传递某值给子组件并发生重渲染,但是问题是上面这里种情况会遇到: 

  父组件 props 初始传递 ture   => 子组件获得 true ,点击后变为 false,但此时父组件还是true => 点击父组件将子组件变回true,但根据文章开头所讲,赋值true或其他方式,父组件的值并未发生变化,所以功能失效

 

解决方法

父子组件  封装ui组件,父组件传递给子组件change方法,每当ui组件的值改变,便调用该方法,同步改变父组件的值,这样子组件为false时,父组件也为false,此时赋值true将会实现重新渲染

非父子组件  用事件总线,其他同上

posted @ 2021-04-07 20:37  铽楉QAQ  阅读(151)  评论(0)    收藏  举报