关于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将会实现重新渲染
非父子组件 用事件总线,其他同上
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号