vue3子组件如何修改父组件传过来的props数据

 更新时间:2022年10月29日 15:35:55   作者:前端阿彬  
周所周知vue的props是单向数据流,可以从父组件中改变传往子组件的props,反之则不行,下面这篇文章主要给大家介绍了关于vue3子组件如何修改父组件传过来的props数据的相关资料,需要的朋友可以参考下

前言

最近新项目用vue3搭建的,准备开始使用vue3的语法,从这篇开始记录下vue3遇到的一些问题和一些语法的使用方法,以便于以后复习,也可能帮助到一些小伙伴。

1. 修改父组件普通数据

使用v-mode语法,代替了vue2.x的.sync修饰符

  1. 父组件用ref() 定义一个普通数据为响应式变量,例 var test = ref(‘parent’)
  2. 父组件用v-mode将数据绑定到子组件上
<ChildComponent v-model:test="test" />

其实它是以下的简写:

<ChildComponent :test="test" @update:test="test = $event" />

3.子组件

子组件使用emit修改父组件数据

//ChildComponent 
   props: {
    test:String     //接收父组件数据
  },
  emits: ['update:test'],      //定义组件可触发的事件
  setup(props,ctx){
    function onClick() {
      ctx.emit('update:test','child')
    }
  }

相关vue3文档

2. 修改父组件复杂数据(对象)

在vue2.x中,子组件虽然不能修改父组件传过来的普通数据,但是可以直接操作复杂数据,但是vue3不行。目前我只能用类似vue2的语法来解决修改父组件对象数据的问题,如有哪位大佬有更好的办法,还希望评论区指教!!!

父组件reactive定义一个对象为响应式数据,并绑定到子组件上,例如

<ChildComponent :obj="obj" @update:obj="updateObj" />

const obj = reactive({
  key: 'test'
})

父组件定义一个修改数据的方法

function updateObj(params){
  obj.key = params
}
return{
  updateObj
}

子组件emit定义一个可触发的事件

//ChildComponent 
   props: {
    obj:Object     //接收父组件数据
  },
  emits: ['update:obj'],      //定义组件可触发的事件
  setup(props,ctx){
    function onClick() {
      ctx.emit('update:obj','child')
    }
  }

最后

我试过用第一种修改普通数据的方式修改父组件对象,但是发现没有效果,好像是reactive定义的响应式数据,用v-model绑定后就被覆盖成普通对象了,不知道是不是,望vue3大佬指教!

到此这篇关于vue3子组件如何修改父组件传过来的props数据的文章就介绍到这了,更多相关vue3修改父组件传的props数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue.js创建Calendar日历效果

    Vue.js创建Calendar日历效果

    这篇文章主要为大家详细介绍了Vue.js创建Calendar日历效果的过程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • vue实现点击出现操作弹出框的示例

    vue实现点击出现操作弹出框的示例

    这篇文章主要介绍了vue实现点击出现操作弹出框的示例,帮助大家更好的理解和使用vue,感兴趣的朋友可以了解下
    2020-11-11
  • vue中数据请求axios的封装和使用

    vue中数据请求axios的封装和使用

    这篇文章主要介绍了vue中数据请求axios的封装和使用,Axios 是一个基于 promise 的 HTTP 库,下面文章围绕主题的相关资料展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-04-04
  • vue元素实现动画过渡效果

    vue元素实现动画过渡效果

    这篇文章主要介绍了vue元素实现动画过渡效果,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • Nuxt.js之自动路由原理的实现方法

    Nuxt.js之自动路由原理的实现方法

    这篇文章主要介绍了Nuxt.js之自动路由原理的实现方法,nuxt.js会根据pages目录结构自动生成vue-router模块的路由配置。非常具有实用价值,需要的朋友可以参考下
    2018-11-11
  • 浅析Vue单文件组件与非单文件组件使用方法

    浅析Vue单文件组件与非单文件组件使用方法

    这篇文章主要介绍了Vue单文件组件与非单文件组件使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-12-12
  • vue 虚拟dom的patch源码分析

    vue 虚拟dom的patch源码分析

    这篇文章主要介绍了vue 虚拟dom的patch源码分析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • vue 实现左滑图片验证功能

    vue 实现左滑图片验证功能

    网页中滑动图片验证一直是各大网站、移动端的主流校验方式,其主要作用是为了区分人和机器以及为了防止机器人程序暴力登录或攻击从而设置的一种安全保护方式,这篇文章主要介绍了vue 实现左滑图片验证,需要的朋友可以参考下
    2023-04-04
  • vue组件传值的11种方式总结

    vue组件传值的11种方式总结

    这篇文章主要介绍了vue组件传值的11种方式总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • Vue2中compiler和runtime模式报错template compiler is not available

    Vue2中compiler和runtime模式报错template compiler is 

    本文主要介绍了Vue2中compiler和runtime模式报错template compiler is not available,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07

最新评论