组件开发过程中有个单项数据流原则, 不在子组件中修改父组件的值是常识问题。
官方文档声明:one-way-data-flow
思路分析
1、讲讲单项数据流原则,表明为何不能这么做
看过官方文档,one-way-data-flow,单项数据流让数据流向难以理解,出了问题,不好排查
2、举几个常见的场景说说解决方案
3、结合实践讲讲如果需要修改父组件状态应该如何做
回答范例
1、所有的props都使得其父子之间形成一个单向下行绑定:父级prop的更新会向下流动到子组件中,但是反过来则不行,这样会防止从子组件意外变更父级组件的状态,从而导致应用的数据流向难以追踪。另外,每次父级组件发生变更时,子组件中所有的props都将刷新成最新的值. 这就意味着,不应该在子组件内部改变props的值,如果强行改变,Vue会在控制台中发出警告。
2、实际开发中想要子组件改变父组件数据的场景:
子组件接收一个父组件传递的props初始值,子组件希望将其作为本组件的数据使用:
处理办法: 子组件定一个data,并将props定义为其初始值。1
2const props = definedProps(['initialCounter'])
const counter = ref(props.initialCounter)prop以原始的值传入且需要转换
处理办法: 子组件通过props定义一个计算属性。
1 | const props = definedProps(['size']) |
3、如果想要修改父组件的值,子组件派发emit事件,父组件监听事件去修改数据。
总结:大功告成✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️
参考链接: