当前位置: 首页 > Web前端 > HTML

Vue3中props和defineEmit的区别

时间:2023-03-29 12:32:50 HTML

因为之前写的项目都是基于react开发和思考的,所以一直没接触过vue中emit的概念,官方文档也不是特别清楚,(可能是因为我的思路还没有从react的编程概念上转移过来)我查阅了很多作者对emit的解释,但是从他们的回答中我理解的不是很透彻。好在通过这几天公司项目的实践,自己查了一些视频,总算明白了这个方法的基本逻辑。如果你正在将react转换为vue,那么这篇文章将对你有很大的帮助;如果你是vue的初学者,不要害怕,本文尽量用“??说人话”的视角来讲解。阅读本文的前提是你需要对父子组件通信的概念有很好的理解,并依赖于props来实现这个概念。本文将解释props和emit的区别,让你全面了解emit是什么。1、这里我们准备一个App组件作为父组件,一个useEmit.vue文件作为子组件。(其他文件不用看,都是我之前实践中用到的)App组件的结构也很简单。useEmit组件的结构只是一个按钮。整体页面结构是这样的:2、此时提出我们的需求,现在子组件中有一个变量名,需要渲染到父组件中,我们怎么处理呢?(这里不考虑变量提升)1.通过Props的大致思路其实很简单,就是父组件提供一个函数,通过props传递给子组件,子组件将自己的变量传递给父组件通过调用这个函数过去。1、我们在App组件中定义一个函数。2、思考:这个函数肯定需要一个参数来接收子传过来的信息。ok,拿到手了,我们打印出来看看。3、接下来就是传递给子组件,从组件中调用即可。在vue中,需要注意的是,在传递变量的时候,需要在属性前面加上:来告诉vue,我在后面双引号里面传递的是一个变量。注:这个和react的区别也是我觉得设计不好的地方。因为vue中有很多地方使用了双引号,所以非常容易让人看不懂。第一次看公司代码的时候,当时还不知道。Vue的设计理念,经常分不清这个东西到底是字符串还是变量。这是一个额外的知识。在react中传递props时,如果是变量,则用{}表示,字符串用""表示4.组件要接收这个方法,返回给子组件。这里通过vue3的definProps获取,定义传递给父组件的变量名。如果你对这个方法不了解,可以看我之前的文章。在子组件的