通用型组件就是各大组件库的组件风格,包括按钮、表单、弹窗等通用功能。 业务型组件包含业务的交互逻辑,包括购物车、登录注册等,会和我们不同的业务强绑定。
,, 和 相应的,某些元素仅在放置于特定元素中时才会显示,例如, 和 解决:使用is<table> <tr is="vue:blog-post-row"></tr> </table> 123 一个可以通过其“name”选项递归渲染自己的组件,(如果使用单文件组件,则从文件名推断)全局注册组件问题 需要注册全局注册,但并没有被使用的组件无法在生产打包时被自动移除全局注册在大型项目中使项目的依赖关系变得不那么明确,定位不易,不好维护。 局部组件(推荐) 无需注册,引入直接使用局部注册的组件需要在使用它的父组件中显式导入只能在该父组件中使用。使组件之间的依赖关系更加明确,并且对 tree-shaking 更加友好 格式-双驼峰(推荐)props 为了和 HTML attribute 对齐 一般将props传入写为kebab-case形式仅写上 prop 但不传值,会隐式转换为 true 组件名-双驼峰(推荐)单向绑定、单向数据流prop只读,组件内不可更新prop更改场景 prop为初始值,后续作为组件内部变量使用。可使用ref(props.a)转换prop值。使用computed 更改对象 / 数组类型的 props,可被更改但不推荐。推荐使用抛出事件来处理。defineProps() 宏中的参数不可以访问 1234567891011121314151617181920 另一种在组件内实现 v-model 的方式是使用一个可写的,同时具有 getter 和 setter 的计算属性。get 方法需返回 modelValue prop,而 set 方法需触发相应的事件 1234567891011121314151617181920 透传 当一个组件以单个元素为根作渲染时,透传的 attribute 会自动被添加到根元素上如果一个子组件的根元素已经有了 class 或 style attribute,它会和从父组件上继承的值合并监听器同样式效果下一个组件会在根节点上渲染另一个组件,会透传。如果你不想要一个组件自动地继承 attribute,你可以在组件选项中设置inheritAttrs: false。禁用透传的组件中 直接用 $attrs 访问。使用v-bind="$attrs"将传递的数据进一步传给其他指定组件。访问:const attrs = useAttrs()attrs不是响应式需要使用响应式attrs 使用 prop。使用 onUpdated() 使得在每次更新时结合最新的 attrs 执行副作用 有着多个根节点的组件没有自动 attribute 透传行为,如果 $attrs 没有被显式绑定,将会抛出一个运行时警告。 插槽 具名作用域插槽 分两个点,名字和插槽数据传递 子组件内插槽: 1234 父组件使用: <MyComponent #test="slotProps"> {{ slotProps.text }} {{ slotProps.count }} </MyComponent> 123 高级列表组件示例 {{ body }} by {{ username }} | {{ likes }} likes 12345678 使用: 12345 无渲染组件 只包括了逻辑而不需要自己渲染内容,视图输出通过作用域插槽全权交给了消费者组件。我们将这种类型的组件称为无渲染组件。适用:作用域插槽在需要同时封装逻辑、组合视图界面时 依赖注入 一个父组件相对于其所有的后代组件,会作为依赖提供者。任何后代的组件树,无论层级有多深,都可以注入由父组件提供给整条链路的依赖。用法: 注入: 12345678910 调用: 12345678910 当提供 / 注入响应式的数据时,建议尽可能将任何对响应式状态的变更都保持在供给方组件中。这样可以确保所提供状态的声明和变更操作都内聚在同一个组件内,使其更容易维护。在注入方组件中更改数据,提供refA及setRefA两个函数。确保数据被注入方的组件更改:readonly()推荐在一个单独的文件中导出这些注入名 Symbol 异步组件 用法: const AsyncComp = defineAsyncComponent(() => import('./components/MyComponent.vue') ) ... const AsyncComp = defineAsyncComponent({ // 加载函数 loader: () => import('./Foo.vue'), // 加载异步组件时使用的组件 loadingComponent: LoadingComponent, // 展示加载组件前的延迟时间,默认为 200ms delay: 200, // 加载失败后展示的组件 errorComponent: ErrorComponent, // 如果提供了一个 timeout 时间限制,并超时了 // 也会显示这里配置的报错组件,默认值是:Infinity timeout: 3000 }) 12345678910111213141516171819 搭配内置组件 Suspense 使用 API用法 defineProps,编译宏命令,不需要显示引入,可直接使用。defineEmits 设置: definedEmits([ 'sendData' ]) 123 使用: emit('sendData', data) 1 v-model 设置: definedProps({ modelValue: 'x' }) const emit = definedEmits([ 'update:modelValue' ]) 123456 使用: emit('update:modelValue') 1 相关阅读: 【设计模式】Java 设计模式之享元模式(Flyweight) 什么是应用性能管理(APM) Spring源码深度解析:七、bean的加载① - doGetBean概述 查询表中指定列数据 C++设计模式_04_Strategy 策略模式 Matlab基本语法(二) Tomcat 限制对 Web 应用程序的访问 《Eolink 征文活动- -RESTful接口全解测试-全方位了解Eolink-三神技超亮点》 Xiaojie雷达之路---匹配滤波器 Prometheus+Grafana 监控平台实践-搭建&常用服务监控&告警 原文地址:https://blog.csdn.net/junjiahuang/article/details/127922047 最新文章 沪漂五周年了:我越来越迷茫了 Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文 MySQL-Seconds_behind_master的精度误差 [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间 AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊 Agent OS :五种驯服不确定性的范式 PortSwigger SQL注入LAB11 数据库即时编译JIT [Begin]AI Learn Data Day 0 深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU 热门文章 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!! 奉劝各位学弟学妹们,该打造你的技术影响力了! 五年了,我在 CSDN 的两个一百万。 Java俄罗斯方块,老程序员花了一个周末,连接中学年代! 面试官都震惊,你这网络基础可以啊! 你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法 心情不好的时候,用 Python 画棵樱花树送给自己吧 通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了! 13 万字 C 语言从入门到精通保姆级教程2021 年版 10行代码集2000张美女图,Python爬虫120例,再上征途 小工具 小游戏 Copyright © 2022 侵权请联系2656653265@qq.com 京ICP备2022015340号-1 京公网安备 11010502049817号
, 和 解决:使用is<table> <tr is="vue:blog-post-row"></tr> </table> 123 一个可以通过其“name”选项递归渲染自己的组件,(如果使用单文件组件,则从文件名推断)全局注册组件问题 需要注册全局注册,但并没有被使用的组件无法在生产打包时被自动移除全局注册在大型项目中使项目的依赖关系变得不那么明确,定位不易,不好维护。 局部组件(推荐) 无需注册,引入直接使用局部注册的组件需要在使用它的父组件中显式导入只能在该父组件中使用。使组件之间的依赖关系更加明确,并且对 tree-shaking 更加友好 格式-双驼峰(推荐)props 为了和 HTML attribute 对齐 一般将props传入写为kebab-case形式仅写上 prop 但不传值,会隐式转换为 true 组件名-双驼峰(推荐)单向绑定、单向数据流prop只读,组件内不可更新prop更改场景 prop为初始值,后续作为组件内部变量使用。可使用ref(props.a)转换prop值。使用computed 更改对象 / 数组类型的 props,可被更改但不推荐。推荐使用抛出事件来处理。defineProps() 宏中的参数不可以访问 1234567891011121314151617181920 另一种在组件内实现 v-model 的方式是使用一个可写的,同时具有 getter 和 setter 的计算属性。get 方法需返回 modelValue prop,而 set 方法需触发相应的事件 1234567891011121314151617181920 透传 当一个组件以单个元素为根作渲染时,透传的 attribute 会自动被添加到根元素上如果一个子组件的根元素已经有了 class 或 style attribute,它会和从父组件上继承的值合并监听器同样式效果下一个组件会在根节点上渲染另一个组件,会透传。如果你不想要一个组件自动地继承 attribute,你可以在组件选项中设置inheritAttrs: false。禁用透传的组件中 直接用 $attrs 访问。使用v-bind="$attrs"将传递的数据进一步传给其他指定组件。访问:const attrs = useAttrs()attrs不是响应式需要使用响应式attrs 使用 prop。使用 onUpdated() 使得在每次更新时结合最新的 attrs 执行副作用 有着多个根节点的组件没有自动 attribute 透传行为,如果 $attrs 没有被显式绑定,将会抛出一个运行时警告。 插槽 具名作用域插槽 分两个点,名字和插槽数据传递 子组件内插槽: 1234 父组件使用: <MyComponent #test="slotProps"> {{ slotProps.text }} {{ slotProps.count }} </MyComponent> 123 高级列表组件示例 {{ body }} by {{ username }} | {{ likes }} likes 12345678 使用: 12345 无渲染组件 只包括了逻辑而不需要自己渲染内容,视图输出通过作用域插槽全权交给了消费者组件。我们将这种类型的组件称为无渲染组件。适用:作用域插槽在需要同时封装逻辑、组合视图界面时 依赖注入 一个父组件相对于其所有的后代组件,会作为依赖提供者。任何后代的组件树,无论层级有多深,都可以注入由父组件提供给整条链路的依赖。用法: 注入: 12345678910 调用: 12345678910 当提供 / 注入响应式的数据时,建议尽可能将任何对响应式状态的变更都保持在供给方组件中。这样可以确保所提供状态的声明和变更操作都内聚在同一个组件内,使其更容易维护。在注入方组件中更改数据,提供refA及setRefA两个函数。确保数据被注入方的组件更改:readonly()推荐在一个单独的文件中导出这些注入名 Symbol 异步组件 用法: const AsyncComp = defineAsyncComponent(() => import('./components/MyComponent.vue') ) ... const AsyncComp = defineAsyncComponent({ // 加载函数 loader: () => import('./Foo.vue'), // 加载异步组件时使用的组件 loadingComponent: LoadingComponent, // 展示加载组件前的延迟时间,默认为 200ms delay: 200, // 加载失败后展示的组件 errorComponent: ErrorComponent, // 如果提供了一个 timeout 时间限制,并超时了 // 也会显示这里配置的报错组件,默认值是:Infinity timeout: 3000 }) 12345678910111213141516171819 搭配内置组件 Suspense 使用 API用法 defineProps,编译宏命令,不需要显示引入,可直接使用。defineEmits 设置: definedEmits([ 'sendData' ]) 123 使用: emit('sendData', data) 1 v-model 设置: definedProps({ modelValue: 'x' }) const emit = definedEmits([ 'update:modelValue' ]) 123456 使用: emit('update:modelValue') 1 相关阅读: 【设计模式】Java 设计模式之享元模式(Flyweight) 什么是应用性能管理(APM) Spring源码深度解析:七、bean的加载① - doGetBean概述 查询表中指定列数据 C++设计模式_04_Strategy 策略模式 Matlab基本语法(二) Tomcat 限制对 Web 应用程序的访问 《Eolink 征文活动- -RESTful接口全解测试-全方位了解Eolink-三神技超亮点》 Xiaojie雷达之路---匹配滤波器 Prometheus+Grafana 监控平台实践-搭建&常用服务监控&告警 原文地址:https://blog.csdn.net/junjiahuang/article/details/127922047 最新文章 沪漂五周年了:我越来越迷茫了 Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文 MySQL-Seconds_behind_master的精度误差 [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间 AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊 Agent OS :五种驯服不确定性的范式 PortSwigger SQL注入LAB11 数据库即时编译JIT [Begin]AI Learn Data Day 0 深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU 热门文章 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!! 奉劝各位学弟学妹们,该打造你的技术影响力了! 五年了,我在 CSDN 的两个一百万。 Java俄罗斯方块,老程序员花了一个周末,连接中学年代! 面试官都震惊,你这网络基础可以啊! 你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法 心情不好的时候,用 Python 画棵樱花树送给自己吧 通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了! 13 万字 C 语言从入门到精通保姆级教程2021 年版 10行代码集2000张美女图,Python爬虫120例,再上征途 小工具 小游戏 Copyright © 2022 侵权请联系2656653265@qq.com 京ICP备2022015340号-1 京公网安备 11010502049817号
<table> <tr is="vue:blog-post-row"></tr> </table>
kebab-case
true
prop
ref(props.a)
computed
defineProps()
inheritAttrs: false
v-bind="$attrs"
const attrs = useAttrs()
attrs
onUpdated()
<MyComponent #test="slotProps"> {{ slotProps.text }} {{ slotProps.count }} </MyComponent>
{{ body }} by {{ username }} | {{ likes }} likes
{{ body }}
by {{ username }} | {{ likes }} likes
refA
setRefA
readonly()
const AsyncComp = defineAsyncComponent(() => import('./components/MyComponent.vue') ) ... const AsyncComp = defineAsyncComponent({ // 加载函数 loader: () => import('./Foo.vue'), // 加载异步组件时使用的组件 loadingComponent: LoadingComponent, // 展示加载组件前的延迟时间,默认为 200ms delay: 200, // 加载失败后展示的组件 errorComponent: ErrorComponent, // 如果提供了一个 timeout 时间限制,并超时了 // 也会显示这里配置的报错组件,默认值是:Infinity timeout: 3000 })
definedEmits([ 'sendData' ])
使用:
emit('sendData', data)
definedProps({ modelValue: 'x' }) const emit = definedEmits([ 'update:modelValue' ])
emit('update:modelValue')
京公网安备 11010502049817号