【Vue五分钟】 五分钟了解Vue组件的核心概念

简介: 组件其实是被认为是一个个独立的 UI 模块,一个系统就是由这些模块合起来。

1.Vue组件的核心概念--属性

组件其实是被认为是一个个独立的 UI 模块,一个系统就是由这些模块合起来。

2345_image_file_copy_381.jpg

不同组件其实就是 options 的不同。

2345_image_file_copy_382.jpg

关于 props 其实是不推荐直接 props 后面啪的是一堆东西,而是对象的形式一个个详细的给,方便后面的维护。

//props: [ " name', 'type', "list', 'isVisible'],
props:{
name: String,
type:{
validator: function(value){
//这个值必须匹配下列字符串中的一个
return [""success",""warning"."danger""].includes(value);
},
list:{
type: Array,
//对象或数组默认值必须从一个工厂函散获取
default:()=>[]
),
isVisible: {type: Boolean,default: false},
onChange: {
type: Function,default:()=>{}
}
},

不推荐用 onChange 这个名字,可能会与之后的函数冲突。至于我们父组件里多传了一个title 等原生属性而子组件却没有对齐进行处理则会默认自动挂载到根元素上!可以在子组件通过 inheritAttrs 置为 false 取消挂载。注意父组件传递过来的属性无法直接修改,因为是单向数据流。

2345_image_file_copy_383.jpg

答案:

2345_image_file_copy_384.jpg

在组件initProps方法的时候,会对props进行delineReactive操作,传入的第四个参数是自定义的sel的数,该函数会在触发props的set方法时执行,当props修改了,就会运行这里传入的第四个参数,然后进行判断,如果不Mroot根组件,并且不是更新子组件,那么说明更新的是props,所以会警告。

if (process.env.NODE_EN !== ' production '){
var hyphenatedKey = hyphenate(key);
if (isReservedAttribute(hyphenatedKey) ||
config.isReservedAttr(hyphenatedKey)){
warn(
("\""+ hyphenatedKey +"\" is a reserved attribute and cannot be used as component prop."),
vm
);
}
defineReactives$$1( props,key,value,function (){
if(!isRoot && !isUpdatingchildcomponent) {
warn(
"Avoid mutating a prop directly since the value will be " +"overwritten whenever the parent component re-renders." +
"Instead, use a data or computed property based on the prop's " +"value.Prop being mutated:"" + key +"\"",
vm
);));

2.Vue组件的核心概念--事件

2345_image_file_copy_385.jpg

<div>
name: {{ nane || "--" }}
<br/>
<input :value="name"" @change="handleChange"/>
<br/>
<br/>
<div @click="handleDivclick">
<button @click="handleClick">重置成功</button>&nbsp;&nbsp;&nbsp;
<button aclick.stop="handleClick">重置失败</button>
</div>
</div>
</template>
<script>
export default {
name:"EventDeno",
props:{
name: String,
methods:{
handleChange(e) {
this.$emit("change".e.target.value);
},
handleDivClick() {
  this.$emit("change","");
},
handleclick(e){
//都会失败
//e.stopPropagation()
:
</script>

这个其实就是输入的话触发 handleChange ,改变 name 值,点击按钮都会把 name 置为空,如果 .stop (即重置失败)会阻止冒泡以至于无法冒到 div 的点击事件(清空 name )也就 无法清空,如果在两个按钮的事件里用 stopPropagation 则点哪个按钮都无法置空.

3.Vue组件的核心概念--插槽

2345_image_file_copy_386.jpg

现在其实都不区分插槽了,推荐使用下面的方式即每一段下面那种(↑)。

<a-tab-pane key="slot" tab="插槽">
<h2>2.6新语法</h2>
<SlotDemo>
<p>default slot</p>
<template v-slot:title>
<p>title slot1</p>
<p>title siot2</p>
</template>
<template v-slot:item="props">
<p>item slot-scope {{ props }}</p>
</template>
</SlotDemo>
<br/>
<h2>老语法</h2>
<SlotDemo>
 <p>default slot</p>
<p slot="title">title slot1</p>
<p slot="title">title slot2</p>
<p slot="item" slot-scope="props">item slot-scope {{ props }}</p>
</SlotDeno>
<template>
<div>
<slot/>
<slot namea"title" />
<slot hame="item" v-bind="{ value: 'vue' } />
</div>
</template>
<script>
export default {
name: "SLotDemo"
};
</script> 

作用域插槽是通过 v-bind 的方式把属性传递过去.

2345_image_file_copy_387.jpg

所谓大属性就是这三类其实都可以通过属性去实现。

相关文章
|
20天前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
34 1
vue学习第四章
|
20天前
|
JavaScript 前端开发
vue学习第九章(v-model)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生,自学前端2年半,正向全栈进发。此篇介绍v-model在不同表单元素中的应用及修饰符的使用,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
28 1
vue学习第九章(v-model)
|
19天前
|
JavaScript 前端开发 开发者
vue学习第十章(组件开发)
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文深入讲解Vue组件的基本使用、全局与局部组件、父子组件通信及数据传递等内容,适合前端开发者学习参考。持续更新中,期待您的关注!🎉🎉🎉
33 1
vue学习第十章(组件开发)
|
13天前
|
前端开发 JavaScript 测试技术
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
24 8
|
13天前
|
JavaScript
在 Vue 3 中,如何使用 v-model 来处理自定义组件的双向数据绑定?
需要注意的是,在实际开发中,根据具体的业务需求和组件设计,可能需要对上述步骤进行适当的调整和优化,以确保双向数据绑定的正确性和稳定性。同时,深入理解 Vue 3 的响应式机制和组件通信原理,将有助于更好地运用 `v-model` 实现自定义组件的双向数据绑定。
|
25天前
|
JavaScript 前端开发 UED
vue学习第二章
欢迎来到我的博客!我是一名自学了2年半前端的大一学生,熟悉JavaScript与Vue,目前正在向全栈方向发展。如果你从我的博客中有所收获,欢迎关注我,我将持续更新更多优质文章。你的支持是我最大的动力!🎉🎉🎉
38 3
|
JavaScript
Vue的非父子组件之间传值
全局事件总线 一种组件间通信的方式,适用于任意组件间通信
|
缓存 JavaScript 前端开发
Vue Props、Slot、v-once、非父子组件间的传值....
Vue Props、Slot、v-once、非父子组件间的传值....
86 0
|
JavaScript
Vue中父子组件传值
先在⽗组件中给⼦组件的⾃定义属性绑定⼀个⽗组件的变量
|
JavaScript
vue 组件传值
vue 组件传值
84 0