前后端交互
前端数据处理解析
数据处理核心流程
- 流程:通常包括数据获取、验证清洗、格式转换、状态管理、渲染展示、异常处理。
- 方法:包括使用fetch、axios等工具,以及处理异步的方式(async/await, Promise, 回调等)。
- 技巧:数据缓存、分页、懒加载、错误重试、取消请求等
核心处理步骤概述
数据获取阶段
- 使用axios,fetch API发送请求获取数据;
- 统一添加token和超时处理
1
2
3
4
5axios.interceptors.request.use(config => {
config.headers.Authorization = `Bearer ${localStorage.getItem('token')}`;
config.timeout = 10000; // 全局超时设置
return config;
}); - 并发优化:使用 Promise.all 并行请求
数据验证与清洗
使用typeof、instanceof或专业库
验证工具推荐:Zod(TypeScript首选);Yup(JavaScript轻量级);Joi(Node.js生态)
(看官方文档深入理解)
常见清洗操作:
1 | // 1. 过滤无效值 |
数据转换与格式化
时间戳:”YYYY-MM-DD”->new Date().toLocaleDateString()
价格数字:”¥12.80”->Intl.NumberFormat(‘zh-CN’)
状态码:颜色标签->映射字典转换
树形结构:扁平列表->递归遍历
1 | //将后端返回的驼峰式命名转为下划线(或反之),适配前端规范: |
状态管理与缓存
- 状态管理:
简单场景:组件本地状态(如 React 的useState、Vue 的data)。
复杂场景:全局状态库(Redux、Vuex、Pinia),实现跨组件数据共享 - 缓存策略:
客户端缓存:
HTTP缓存:静态资源->Cache-Control头
内存缓存:当前会话->useState/useMemo
持久化缓存:长期存储->localStorage
SWR/React Query:数据请求->专用库
利用localStorage、sessionStorage存储高频数据,设置过期时间1
2
3
4
5
6
7
8
9
10
11// 带过期时间的缓存示例
function getCachedData(key, expireTime = 3600000) { // 1小时过期
const cache = localStorage.getItem(key);
if (!cache) return null;
const { data, timestamp } = JSON.parse(cache);
if (Date.now() - timestamp > expireTime) {
localStorage.removeItem(key);
return null;
}
return data;
}
数据渲染与更新
虚拟 DOM 框架(React/Vue):数据变化自动触发视图更新,需注意细粒度更新(如 Vue3 的响应式、React 的useState)。
原生 JS:手动操作 DOM,需注意性能(如使用DocumentFragment批量更新)
数据验证与转换(重要)
数据验证的核心目标:
确保数据格式正确(如字符串、数字、日期、邮箱等)
校验数据范围(如最大值、最小值、长度限制)
检查字段是否存在(必填字段是否缺失)
过滤非法字符或恶意内容(如XSS攻击、SQL注入)
手动实现(简单场景)
基础类型校验:手动遍历对象 / 数组,使用typeof、instanceof、Array.isArray等方法校验:
使用验证库
Zod TypeScript优先,零依赖 现代前端项目
Yup 轻量级,简洁API 表单验证
Joi Node.js生态成熟 全栈应用
Ajv JSON Schema标准,性能最佳 大型复杂数据结构
最佳实践建议
- 分层处理:
请求层:统一拦截响应,校验基本结构(如是否包含code、data字段)。
业务层:针对具体业务数据进行模式验证和转换。
组件层:对组件 props 进行二次校验(如 React 的prop-types或 TypeScript 接口)。 - 与框架集成:
React:结合useEffect在数据获取后立即验证,或使用react-hook-form+Zod管理表单。
Vue:在setup()中验证数据,或使用 Vue 的prop验证。 - 错误处理策略:
对验证失败的数据进行降级处理(如显示默认值、空状态)。
记录验证错误日志,反馈给后端优化接口。 - 性能优化:
按需转换:只在需要时转换数据
缓存结果:对相同输入缓存转换结果
惰性验证:在渲染前才执行验证
Web Workers:复杂转换在后台线程执行
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Melon_Nie的月光橘海!
评论