Vue——子组件可以修改父组件数据吗

简介: 组件化开发过程中有个单向数据流原则,不在子组件中修改父组件数据是个常识问题。

分析

这是一个实践知识点,组件化开发过程中有个单向数据流原则,不在子组件中修改父组件数据是个常识问题。

回答思路

  1. 讲讲单项数据流原则,表明为何不能这么做
  2. 举几个常见场景的例子说说解决方案
  3. 结合实践讲讲如果需要修改父组件状态应该如何做

回答范例

  1. prop 会使父子间形成一个单向的下行绑定:父级 prop 的更新会向下流动到子组件中,但子组件数据不能流向到父组件中,这样做是为了防止子组件意外变更父级组件的状态,从而导致的数据流向难以理解、不好维护、出了问题不好找错等问题。
  2. 实际开发过程中需要修改prop的两个场景:
  • ❓场景1:这个 prop 用来传递一个初始值,这个子组件接下来希望将其作为一个本地的 prop 数据来使用。
  • ✅解决办法:最好定义一个本地的 data,并将这个 prop 用作其初始值:
    const props = defineProps(['某变量'])
    const counter = ref(props.某变量)
  • ❓场景2:这个 prop 以一种原始的值传入且需要进行转换。
  • ✅解决办法:最好使用这个 prop 的值来定义一个计算属性:
    const props = defineProps(['某变量']) // prop变化,计算属性自动更新
    const 某计算属性 = computed(() => props.某变量.trim().toLowerCase())
  1. 实践中如果确实想要改变父组件属性应该emit一个事件让父组件去做这个变更。
    注意虽然我们不能直接修改一个传入的对象或者数组类型的prop,但是我们还是能够直接改内嵌的对象或属性。



目录
相关文章
|
3天前
|
JavaScript
vue消息订阅与发布
vue消息订阅与发布
|
4天前
|
JavaScript 前端开发 IDE
Vue学习笔记5:用Vue的事件监听 实现数据更新的实时视图显示
Vue学习笔记5:用Vue的事件监听 实现数据更新的实时视图显示
|
3天前
|
JavaScript
vue尚品汇商城项目-day07【vue插件-50.(了解)表单校验插件】
vue尚品汇商城项目-day07【vue插件-50.(了解)表单校验插件】
12 4
|
3天前
|
JavaScript
vue尚品汇商城项目-day07【51.路由懒加载】
vue尚品汇商城项目-day07【51.路由懒加载】
12 4
|
4天前
|
JavaScript 前端开发
Vue学习笔记8:解决Vue学习笔记7中用v-for指令渲染列表遇到两个问题
Vue学习笔记8:解决Vue学习笔记7中用v-for指令渲染列表遇到两个问题
|
3天前
|
JavaScript
vue尚品汇商城项目-day07【vue插件-54.(了解)生成二维码插件】
vue尚品汇商城项目-day07【vue插件-54.(了解)生成二维码插件】
8 2
|
4天前
|
JavaScript 前端开发 API
Vue学习笔记7:使用v-for指令渲染列表
Vue学习笔记7:使用v-for指令渲染列表
|
JavaScript 前端开发
模拟Vue数据的双向绑定
Vue的数据双向绑定功能一直为人称道, Vue数据的双向数据绑定主要依赖了Object.defineProperty,这里尝试用最简单的代码, 实现数据的双向绑定Demo MVVM ViewModel基本实现原理 Gi...
924 0
|
5天前
|
JavaScript
vue组件中的插槽
本文介绍了Vue中组件的插槽使用,包括单个插槽和多个具名插槽的定义及在父组件中的使用方法,展示了如何通过插槽将父组件的内容插入到子组件的指定位置。
|
4天前
|
JavaScript 前端开发 API
Vue学习笔记4:用reactive() 实现数据更新的实时视图显示
Vue学习笔记4:用reactive() 实现数据更新的实时视图显示