【前端开发工作经验总结】

132 阅读3分钟

遇到复杂的业务需求的时候 「要么前端复杂,要么后端」

  1. 画图,这样思路清晰明了
  2. 该参加的会议,一定参加,不然后面得吃亏,把流程对清楚之后,后面就不会遇到坑
  3. 当你遇到一个需求,工作流前端做的时候,接口遍历像链表遍历,十次,你内心一句 mmp, 里面还有两个是轮询成功才能走下一步接口,这里明显接口设计有问题

提测、或者上线之前,让 teach leader 验收一下,即使测试通过了,发邮件给你,可以上线了

防止领导,在线上环境体验,觉得这个不怎么好,需要改一下,那需要改一下,

自测的时候,测试的数据和线上保持一致,这样就提前查出问题

问题:自测和测试都使用的网图、随便的一个 psd 文件,没法测试出使用图片,在标记 psd 文件上,生成的图片分辨率下降了。

原因:使用的图片是预览的图片 (缩率图)的图片地址,应该使用生成的原图

解决:改调用原图接口

自己一直本地、测试环境,没有复现出测试的缺陷

需要找测试,看他是怎样操作才复现出来,只要能复现出来缺陷,都好解决

问题:测试有时发现审核列表,素材视频播发,进度条样式偏移,播放、全屏按钮都不显示

原因:全局样式污染导致,当你先点击【视频管理】里面视频播放时,然后再点击素材视频播发,才会复现出样式污染,也不清楚为啥之前设置是全局的

学会利用 GPT-4o 辅助代码

目前需求 60%-70% 代码都是它写,明显自己效率提高了很多,也有人说,需求复杂的情况,它不行,这个是自己没有需求拆分给 gpt

1. 使用技术栈 react ,ant, typeScript
2. 上传需求原型图
3. 产品需求描述,基本它都会漏掉一些需求
4. 最好有,已经写过的代码规范案例,给 gpt 学习
5. 后面让它优化代码,封装组件,封装函数,封装 hook

下面一个例子,把计算公式给它,然后傻瓜式编程,如果我写,肯定不可能短时间,立刻写出来,它就几分钟,即使我写,代码质量肯定没它规范

import { useMemo } from "react";

/**
 * 计算单个镜头的时长
 * @param shot - 单个镜头对象
 * @param type - 计算类型('min' 或 'max')
 * @returns 单个镜头的最小时长或最大时长
 */
const getShotDuration = (shot: any, type: "min" | "max"): number => {
	return shot.materials.reduce(
		(result: number, video: any) => {
			return type === "min"
				? Math.min(result, video.duration)
				: Math.max(result, video.duration);
		},
		type === "min" ? Infinity : -Infinity,
	);
};

/**
 * 过滤有效镜头
 * @param shots - 镜头数组
 * @returns 仅包含有效镜头的数组(即 material_ids 长度大于 0 的镜头)
 */
const filterValidShots = (shots: any[]): any[] => {
	return shots.filter((shot) => shot.material_ids.length > 0);
};

/**
 * 自定义 Hook,用于计算镜头的统计信息
 * @param shots - 镜头数组
 * @returns { minDuration, maxDuration, totalVideos } - 最小时长、最大时长和视频总数
 */
const useShotStatistics = (
	shots: any[],
): { minDuration: number; maxDuration: number; totalVideos: number } => {
	const validShots = useMemo(() => filterValidShots(shots), [shots]);

	const minDuration = useMemo(() => {
		if (validShots.length === 0) return 0;

		return validShots.reduce((totalDuration: number, shot: any) => {
			return totalDuration + getShotDuration(shot, "min");
		}, 0);
	}, [validShots]);

	const maxDuration = useMemo(() => {
		if (validShots.length === 0) return 0;

		return validShots.reduce((totalDuration: number, shot: any) => {
			return totalDuration + getShotDuration(shot, "max");
		}, 0);
	}, [validShots]);

	const totalVideos = useMemo(() => {
		if (validShots.length === 0) return 0;

		return validShots.reduce(
			(acc: number, shot: any) => acc * (shot.material_ids.length || 1),
			1,
		);
	}, [validShots]);

	return { minDuration, maxDuration, totalVideos };
};

export default useShotStatistics;