网站首页 > 技术文章 正文
你是否也有这种感觉:在搭建新项目时,你会想:
"这个函数我是不是已经写过了...在某个地方?"
是的——我也是。
所以在开发了数十个React、Node和全栈应用后,我不再重复造轮子。
我创建了一个小工具箱——10个我会粘贴到每个项目的代码片段。
它们是我经常依赖的经过实战检验的辅助函数。
下面我将展示这些代码片段,并附上实际应用示例。
1. 防抖函数
用途: 防止输入变化或滚动事件过度触发。
export function debounce(func, delay = 300) {
let timeout;
return (...args) => {
clearTimeout(timeout);
timeout = setTimeout(() => func(...args), delay);
};
}
使用场景:
实时搜索,在用户停止输入后再触发API调用。
const handleChange = debounce((val) => searchUsers(val), 400);
2. 格式化日期为可读字符串
用途: 总是需要它。再也不想谷歌搜索怎么做了。
export function formatDate(dateStr, locale = "en-US") {
return new Date(dateStr).toLocaleDateString(locale, {
year: "numeric",
month: "short",
day: "numeric",
});
}
使用场景:
在仪表盘、收据等地方显示"2024年4月22日"这样的格式。
3. ClassNames 工具函数
用途: 条件类名不应该写得很难看。
export function classNames(...args) {
return args.filter(Boolean).join(" ");
}
使用场景:
<button className={classNames("btn", isActive && "btn-primary")} />
4. 安全JSON解析
用途: 解析格式错误的localStorage或API字符串?你需要这个。
export function safeJsonParse(str, fallback = {}) {
try {
return JSON.parse(str);
} catch {
return fallback;
}
}
使用场景:
const user = safeJsonParse(localStorage.getItem("user"));
5. 判断对象是否为空
用途: 在边界情况下比Object.keys(obj).length === 0更可靠。
export function isEmpty(obj) {
return obj && Object.keys(obj).length === 0 && obj.constructor === Object;
}
使用场景:
if (isEmpty(formErrors)) submitForm();
6. 复制到剪贴板
用途: 每个产品都有需要"复制链接"或"复制代码"的时刻。
export async function copyToClipboard(text) {
try {
await navigator.clipboard.writeText(text);
return true;
} catch (err) {
console.error("Copy failed:", err);
return false;
}
}
使用场景:
<button onClick={() => copyToClipboard(url)}>复制</button>
7. 首字母大写
用途: 小细节。大提升。
export function capitalize(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
使用场景:
capitalize("pending")
8. 延迟(等待)辅助函数
用途: 在测试、动画、节流操作中很有用。
export function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
使用场景:
await sleep(1000);
9. 从数组中移除重复项
用途: 保持数组整洁,无需冗长的逻辑。
export function uniqueArray(arr) {
return [...new Set(arr)];
}
使用场景:
const tags = uniqueArray([...userTags, ...defaultTags]);
10. 从URL下载任何文件
用途: 实现快速、用户友好的下载功能。
export function downloadFile(url, filename) {
const a = document.createElement("a");
a.href = url;
a.download = filename;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
}
使用场景:
downloadFile("/resume.pdf", "MyResume.pdf");
额外分享:我存放这些代码的文件夹结构
在大多数React/Next.js项目中,我会把这些代码放在:
/utils
├── debounce.js
├── formatDate.js
├── classNames.js
├── jsonHelpers.js
├── clipboard.js
└── etc...
然后按需导入:
import { debounce, formatDate, copyToClipboard } from "@/utils";
为什么这些代码片段如此重要(甚至超出你的想象)
- 它们能防止bug
- 它们让代码更整洁
- 它们让你不用在StackOverflow上浪费时间
- 它们可以在每个前端或全栈项目中复用
你不需要1000个辅助函数。
你需要10个真正有用且值得信赖的函数。
要点总结
- 不要每次都重写辅助函数
- 收集你自己的代码片段库
- 为每个项目构建一个"启动模板"(或使用模板仓库)
- 使用小工具函数来避免大bug
行动号召
关注我,获取更多实战开发模式、简洁代码片段和我实际使用的东西——而不仅仅是发推文谈论的内容。
这10个函数不会让你成为10倍效率的开发者。但它们会让你工作速度快数倍。
猜你喜欢
- 2025-07-07 行业大佬对AI编程的看法:应该用, 但AI仍需大量监督和校对
- 2025-07-07 每个开发者都应该知道的20个Git命令
- 2025-07-07 一键转化github开源仓库为交互式教程神器-Code2Tutorial
- 2025-07-07 7种解决Next.js中累积布局偏移(CLS)的方法
- 2025-07-07 纯前端轻量级的神经网络库brain.js
- 2025-07-07 前端工程师都会喜欢的5个JavaScript库
- 2025-07-07 5个可学习可二次开发的nextjs开源仓库
- 2025-07-07 一个即使是高级前端程序员也不知道的惊人小技巧
- 2025-07-07 取代JavaScript库的10个现代Web API及详细实施代码
- 2025-07-07 8个小而美的前端库(前端库,框架大全)
你 发表评论:
欢迎- 07-07使用AI开发招聘网站(100天AI编程实验)
- 07-07Tailwindcss 入门(tailwindcss中文文档)
- 07-07CSS 单位指南(css计量单位)
- 07-07CSS 定位详解(css定位属性的运用)
- 07-07程序员可以作为终身职业吗?什么情况下程序员会开始考虑转行?
- 07-07云和学员有话说:国企转行前端开发,斩获13K高薪!
- 07-0791年转行前端开发,是不是不该转,有啥风险?
- 07-07计算机图形学:变换矩阵(图形学 矩阵变换)
- 594℃几个Oracle空值处理函数 oracle处理null值的函数
- 587℃Oracle分析函数之Lag和Lead()使用
- 575℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 572℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 568℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 561℃【数据统计分析】详解Oracle分组函数之CUBE
- 548℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 541℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端懒加载 (49)
- 前端获取当前时间 (50)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)