当前位置: 首页 > news >正文

前端项目组成

一、前端项目常见模块及功能(以 Vue/React 通用结构为例)

前端项目的模块本质是「按功能拆分的代码文件/文件夹」,就像盖房子的「砖、梁、窗」各司其职:

模块类型功能说明(大白话)举个例子
pages(页面)对应浏览器里能看到的完整页面(如首页、详情页)HomePage.vue(首页)、DetailPage.jsx(详情页)
components(组件)可复用的「小零件」(按钮、卡片、弹窗等),用来拼页面Button.vue(按钮)、Card.jsx(卡片)
api(接口)专门和后端交互的代码(发请求、拿数据)userApi.js(用户相关接口:登录、获取信息)
utils(工具)通用功能代码(格式化时间、处理数据、判断设备等)formatTime.js(把时间戳转成「2024-07-25」)
store(状态)存全局数据的「共享仓库」(如用户登录信息、购物车数据)Vue 用 Vuex/Pinia,React 用 Redux/Zustand
router(路由)控制页面跳转(比如点击「首页」跳转到 /home定义 /home 对应 HomePage 页面

二、模块之间的关系:谁依赖谁?

模块间的关系就像「组装机器」—— 大零件依赖小零件,小零件可能依赖更小的零件:

  1. pages 依赖 components
    页面是「大容器」,需要用组件拼起来。比如 HomePage 可能包含 Banner 组件(顶部轮播)、ProductList 组件(商品列表)。

  2. pages/components 依赖 api
    页面/组件要显示数据(如商品列表),得通过 api 模块向后端要数据。比如 ProductList 组件会调用 productApi.getList() 拿商品数据。

  3. pages/components 依赖 utils
    拿到数据后可能需要处理(比如时间戳转成正常时间),就会调用 utils 里的工具函数。比如 formatTime(new Date())

  4. pages/components 依赖 store
    全局共享的数据(如用户昵称)存在 store 里,页面/组件可以直接取来用。比如 store.userInfo.nickname

  5. router 关联 pages
    路由模块定义「访问哪个地址显示哪个页面」,比如 router 里配置 { path: '/home', component: HomePage },就意味着访问 /home 时显示 HomePage 页面。

三、模块间怎么调用?(核心:import 引入 + 直接用)

调用本质是「我需要你的功能,就把你引进来用」,和「借工具干活」一样:

1. 页面里用组件(pages 调用 components)
<!-- 比如在 HomePage.vue 里用 Card 组件 -->
<template><div class="home"><!-- 直接用引入的组件,就像用 HTML 标签 --><Card title="推荐商品" /> </div>
</template><script>
// 第一步:从 components 文件夹引入组件
import Card from '../components/Card.vue'; export default {components: { Card } // 第二步:注册后才能用
};
</script>
2. 组件里调接口(components 调用 api)
// 比如在 UserCard.jsx 组件里拿用户信息
import { getUserInfo } from '../api/userApi'; // 引入接口函数function UserCard() {// 组件加载时,调用 api 拿数据useEffect(() => {// 直接调用 api 里的函数getUserInfo().then(data => {console.log('拿到用户数据:', data);});}, []);return <div>用户信息卡片</div>;
}
3. 接口里用工具函数(api 调用 utils)
// api/userApi.js 里处理请求参数
import { formatParams } from '../utils/format'; // 引入工具函数// 登录接口
export function login(phone, password) {// 调用工具函数格式化参数(比如给参数加个时间戳)const params = formatParams({ phone, password }); return axios.post('/login', params); // 发请求
}

四、方法内部的调用逻辑(以「用户登录」为例串一遍)

拿「用户点击登录按钮 → 登录成功 → 显示用户信息」这个流程,看代码是怎么一步步调用的:

  1. 组件里的方法(触发点)
    LoginButton.vue 组件里的 handleLogin 方法(用户点击按钮时执行):

    import { loginApi } from '../api/userApi'; // 引入登录接口
    import { setToken } from '../utils/auth'; // 引入存 token 的工具methods: {handleLogin() {// 1. 调用 api 里的登录接口,传账号密码loginApi(this.phone, this.password).then(res => {// 2. 登录成功后,调用工具函数存 tokensetToken(res.token); // 3. 跳转到首页(调用路由方法)this.$router.push('/home'); });}
    }
    
  2. 接口方法(中间层)
    api/userApi.js 里的 loginApi 方法:

    import axios from 'axios';
    import { showError } from '../utils/alert'; // 引入弹窗工具export function loginApi(phone, password) {return axios.post('/api/login', { phone, password }).catch(err => {// 出错时调用工具函数显示错误弹窗showError('登录失败,请检查账号密码'); });
    }
    
  3. 工具方法(底层支持)
    utils/auth.js 里的 setToken 方法(单纯存数据):

    export function setToken(token) {// 把 token 存在浏览器本地存储里localStorage.setItem('token', token);
    }
    

总结:快速上手的小技巧

  1. 先找 pages 文件夹,打开一个页面文件(比如首页),看它引入了哪些 componentsapi,顺着「引入关系」找代码。
  2. 遇到不认识的函数,看它的 import 路径,就能知道来自哪个模块。
  3. 从一个简单功能(比如点击按钮)入手,用「断点调试」一步步跟代码(浏览器 F12 → Sources 面板),看它调用了哪些方法。
http://www.lryc.cn/news/599994.html

相关文章:

  • 【DeepRare】疾病识别召回率100%
  • Linux parted问题:指定分区边界失效
  • HTTP响应状态码详解
  • Java 常用数据库详解
  • 数据结构 之 【排序】(递归实现快速排序)
  • 【补题】Codeforces Round 735 (Div. 2) B. Cobb
  • 中国移动融合企业网关H10G-13-中星微ZX296716处理器-破解教程
  • 基于springboot的小区车位租售管理系统
  • 学习:JS[6]环境对象+回调函数+事件流+事件委托+其他事件+元素尺寸位置
  • 利用DeepSeek测试kdb+x的tpch sf=10数据
  • Vue2-VueRouter
  • rtpengine的docker化
  • 【C语言进阶】一篇文章教会你文件的读写
  • 微服务架构中的资源调度与负载均衡实践
  • CSS3新特性深度解析:Position Sticky粘性定位完整指南
  • Android 15中的16KB大页有何优势?
  • 深度学习篇---预训练模型
  • 升级目标API级别到35,以Android15为目标平台(三 View绑定篇)
  • 【应急响应】进程隐藏技术与检测方式(二)
  • 三坐标和激光跟踪仪的区别
  • 重庆市傲雄司法鉴定所获准新增四项司法鉴定资质
  • 认识编程(3)-语法背后的认知战争:类型声明的前世今生
  • 利用Trae将原型图转换为可执行的html文件,感受AI编程的魅力
  • 使用python的头文件Matplotlib时plt.show()【标题字体过小】问题根源与解决方案
  • java每日精进 7.25【流程设计3.0(网关+边界事件)】
  • 【Linux系统】基础IO(下)
  • 解决笔记本合盖开盖DPI缩放大小变 (异于网传方法,Win11 24H2)
  • STM32的WI-FI通讯(HAL库)
  • 【电赛学习笔记】MaxiCAM 项目实践——二维云台追踪指定目标
  • 嵌入式Linux裸机开发笔记8(IMX6ULL)主频和时钟配置实验(3)