讲师中心 微信公众号
AI工具推荐 视频效率加速

Vue.js 组件设计模式:响应式组件与纯展示组件的划分

夜墨大大_3934

夜墨大大_3934

发布时间:2026-07-20 13:48:21

|

238人浏览过

|

来源于php中文网

原创

Vue组件设计关键在于解耦:响应式组件(容器)负责状态管理与逻辑调度,位于views/目录,对接store/API;纯展示组件只接收props、渲染UI、触发事件,无副作用,命名和目录结构体现角色分工。

vue.js 组件设计模式:响应式组件与纯展示组件的划分

Vue.js 中组件设计的关键不在于“能不能写在一起”,而在于“该不该耦合”。响应式组件(即容器组件)负责状态管理与逻辑调度,纯展示组件(即展示组件)只接收 props、渲染 UI、触发事件,不关心数据从哪来、怎么变。这种划分让组件更易测试、复用和协作。

响应式组件的核心职责

它不是“有响应式数据的组件”,而是承担应用层逻辑的顶层协调者。通常位于 views/ 目录下,直接与 store、API 或组合式 API 的逻辑层交互。

  • 从 Pinia 或 Vuex 获取 state,并通过 computed 或 ref 派生数据
  • 调用业务 API,处理 loading/error 状态,封装副作用(如路由跳转、通知提示)
  • 把结构化数据、事件回调(如 onSubmit、onSelect)以 props 形式传给子组件
  • 不包含任何 CSS 样式或 DOM 结构细节,模板中基本只写子组件标签和 v-if/v-for 控制流

纯展示组件的设计规范

它应像一个“函数”:输入(props)确定,输出(UI)就确定;无副作用、无外部依赖、不调用 API、不修改全局状态。

Wjs Uploading Video
Wjs Uploading Video

将一个或多个视频上传至YouTube。当用户想“上传到YouTube”“发YouTube”“批量上传”“upload to YouTube”“post videos to YouTube”或发布到YouTube时使用此技能。

下载
  • props 必须全部声明,类型建议用 defineProps + TypeScript 接口或运行时验证
  • 内部不使用 ref 或 reactive 管理业务状态(表单临时值除外),所有状态变更都通过 $emit 或事件回调通知父级
  • 样式用 <style scoped> 隔离,避免影响其他组件;图标、按钮等原子元素尽量抽成独立小组件
  • 可被 Jest/Vitest 单独挂载测试,只需 mock props 和监听 emit 即可覆盖主要路径

通信边界必须清晰

父子之间只走“单向数据流 + 事件回调”,避免反向依赖或跨层级取值。

立即学习“前端免费学习笔记(深入)”;

  • 父 → 子:用 props 传递数据和函数(如 :items="list"、@update="handleUpdate")
  • 子 → 父:子组件只 emit 语义化事件(如 submit、remove),不传 raw event 对象;父组件决定如何响应
  • 避免在展示组件里调用 getCurrentInstance()、访问 $parent 或直接读写 store
  • 需要跨组件共享状态时,优先用 provide/inject(限于局部上下文)或提取为独立 composable

实际命名与目录结构建议

名称和位置本身就是设计意图的体现,有助于团队快速理解组件角色。

  • 容器组件命名带 Page 或 View 后缀,如 UserListPage.vue、DashboardView.vue
  • 展示组件命名体现功能或形态,如 UserCard.vue、DataTable.vue、FormInput.vue
  • 目录按角色分层:src/views/(容器)、src/components/(通用展示)、src/components/ui/(原子级展示)
  • 业务相关展示组件可放在 src/modules/user/components/ 下,保持领域内聚

热门AI工具

更多
Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2443

2023.08.11

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

5283

2023.10.09

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6330

2024.03.19

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

5918

2024.03.22

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

843

2024.05.22

vue2.0和3.0区别
vue2.0和3.0区别

vue2.0和3.0区别:vue2的响应式原理是利⽤“Object.defineProperty()”对数据进⾏劫持结合发布订阅模式的⽅式来实现,vue3中使⽤了es6的proxy API对数据代理,实现对数据的监控。本专题为大家提供vue2.0和3.0区别的相关的文章、下载、课程内容,供大家免费下载体验。

1674

2023.07.17

vue3的生命周期有哪些
vue3的生命周期有哪些

vue3的生命周期:1、beforecreate;2、created;3、beforemount;4、mounted;5、beforeupdate;6、updated;7、beforedestroy;8、destroyed;9、activated;10、deactivated等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

12042

2024.02.23

Vue3组合式API与组件开发实战
Vue3组合式API与组件开发实战

本专题讲解 Vue 3 组合式 API 的核心概念与应用技巧,深入分析响应式系统、生命周期管理、组件设计与复用策略。通过完整项目案例,指导前端开发者实现高性能、结构清晰的 Vue 应用,提升开发效率与代码可维护性。

316

2026.02.10

VibeKnow知识视频制作与导出详解
VibeKnow知识视频制作与导出详解

本专题整理VibeKnow从注册、素材上传、AI生成到预览导出的完整操作,帮助新手快速制作第一条知识讲解视频。

0

2026.10.14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Vue 教程
Vue 教程

共42课时 | 17.1万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.4万人学习

Vue.js 微实战--十天技能课堂
Vue.js 微实战--十天技能课堂

共18课时 | 1.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn