写demo的习惯不要带到职场上去

很多同学在学校里写玩具写习惯了,如果在实际工程开发中,有一些需要额外注意的点。
多关注一下边界值的一些展现形态

例如一个弹窗或者提示区的内容是通过后端获取的,需要确定获取失败时展示,和待加载时的交互和展示态,必须要让用户在点击按钮时触发loading来知道系统已经进入处理阶段,同时可以在请求返回结果前禁用按钮,否则用户可能会多次进行点击触发多次请求。

如果你想写一个列表/表格,那么首先考虑的就是分页问题,如果这个列表是通过查询得来的,那么应该考虑防抖节流的问题。如果这个列表可以通过tab去切换,那么你必须要处理用户同时点击多个tab的情况,需要保证最后列表所展示的是用户最后点击的tab。如果列表项展示的是string,那么需要考虑其展示逻辑,比如说数字的精度,文字的长度,访问具体字段时,是否有可能在undefined或者null上取值触发报错。在取tab项特殊code的时候,建议使用枚举来避免硬编码,这样便于case值发生更改值不用进行查找和一个个替换。

1. 异步数据加载与交互状态管理

弹窗、提示区、列表、表格等组件,涉及到后端数据获取时,可能出现以下几种情况:
异步请求失败时的展示

错误展示:当数据获取失败时,要确保用户能收到明确的错误信息。可以展示友好的错误提示(例如:网络错误、服务器错误等),并给用户重试的选项。

if (error) {
  return 
加载失败,请重试。
;
}

状态反馈:对于请求失败的场景,可以使用不同的状态反馈机制,如“重试”按钮,或在弹窗中显示一个带有错误信息的图标。

待加载时的交互和展示

Loading 状态:在数据请求期间,使用 loading 指示器让用户知道数据正在加载。这可以是一个旋转的加载动画、进度条或其他交互提示。确保用户能在点击按钮后看到反馈,避免因延迟而不清楚系统状态。
return loading ?  : ;

占位符:展示内容之前,可以使用占位符(Skeleton loader)来模拟数据加载的过程,提升用户体验。
jreturn loading ?  : ;

2. 分页与防抖、节流
当处理分页或动态列表时,尤其是涉及到异步查询和用户操作时,有很多细节需要注意。
分页处理

分页状态管理:如果列表的数据量较大,需要考虑分页功能,避免一次性加载所有数据,减少性能压力。分页信息(如当前页码、每页条数)需要存储在状态中,并确保在分页时正确更新列表。
UI 提示:在分页加载时,要考虑为用户提供页码信息、加载提示以及分页的上一页/下一页控制。

防抖与节流

防抖:用户在分页、查询、搜索等操作时,可能频繁触发请求,这时候需要使用防抖(Debounce)来延迟请求,避免每次输入都发送请求,提升性能。

const handleSearch = debounce((query) => {
  // 发起搜索请求
}, 300);

节流:对于频繁的事件(如滚动、窗口尺寸变化等),使用节流(Throttle)可以限制事件触发频率,减少不必要的请求和计算。

const handleScroll = throttle((event) => {
  // 处理滚动事件
}, 200);

3. Tab 切换与并发操作
如果一个页面有多个 tab 选项,切换 tab 后,可能会引发一些需要特别处理的交互问题。
多 Tab 切换的防冲突处理

当前选中 Tab 管理:每次切换 Tab 时,确保最新的 tab 选项保持为当前选中状态,避免数据错误。通过 useState 管理当前选中的 tab。

避免并发请求冲突:如果多个 Tab 触发了并发请求,需要确保最后请求返回的数据被正确展示,并避免数据的乱序展示。可以通过 useEffect 中的依赖数组和状态管理来确保数据更新正确。

const [activeTab, setActiveTab] = useState(0);
const [data, setData] = useState([]);

useEffect(() => {
  fetchDataForTab(activeTab);
}, [activeTab]);

4. 列表项展示和字段安全
当展示列表项时,需要注意以下一些常见问题:
数字精度处理

浮点数精度:当列表项显示数字时,特别是涉及到金额、百分比等精确数据时,确保精度正确,避免浮动误差。
js 代码解读复制代码const formatNumber = (num) => num.toFixed(2);

文字长度与显示

文字超长处理:长文本需要进行处理,避免溢出或布局错乱。可以使用 CSS 的 text-overflow: ellipsis 来截断过长文本,或者根据需要动态生成可展开的省略符。
.text-container {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

字段访问的安全性

访问 undefined 或 null 时避免错误:在访问嵌套对象的属性时,必须考虑属性可能为 undefined 或 null 的情况。可以使用可选链 ?. 来避免错误,或者进行显式的 null 检查。
js 代码解读复制代码const userInfo = user?.address?.street || "未知";

5. 枚举与常量使用
对于一些固定的状态、类型、选项等值,建议使用枚举或常量来避免硬编码,提升代码可维护性和可读性。
Tab 选项枚举
当 tab 项目较多时,使用枚举(Enum)来管理常量值,避免频繁修改字符串或值:
const TabTypes = {
  GENERAL: 'general',
  DETAILS: 'details',
  SETTINGS: 'settings'
};

const [activeTab, setActiveTab] = useState(TabTypes.GENERAL);

避免硬编码
对于一些特定的状态、分类值等,应该将其提取为常量或枚举,使得代码更易维护。
const Status = {
  SUCCESS: 'success',
  ERROR: 'error',
  PENDING: 'pending'
};

6. 用户输入验证与防止恶意输入
在处理用户输入时,尤其是表单数据、搜索框等,需要做好输入验证和数据清洗。
输入长度限制与格式检查

输入长度限制:确保输入内容不超长,避免界面布局或性能问题。使用前端验证和后端验证双重保障。
if (input.length > 100) {
  alert("输入过长,请限制在100字符以内");
}

防止 SQL 注入和 XSS 攻击

防止 XSS:如果用户输入的内容会直接渲染到页面中,要做相应的转义处理,避免恶意脚本的执行。
const escapeHtml = (str) => {
  const element = document.createElement('div');
  if (str) element.innerText = str;
  else element.textContent = str;
  return element.innerHTML;
};

7. 键盘和触摸事件支持

键盘操作支持:特别是在移动端或有特殊需求的项目中,考虑键盘交互(如 Enter 键提交、Esc 键关闭弹窗等)。
useEffect(() => {
const handleKeyDown = (e) => {
    if (e.key === 'Escape') {
      closeModal();
    }
  };
  window.addEventListener('keydown', handleKeyDown);
return () => {
    window.removeEventListener('keydown', handleKeyDown);
  };
}, []);

触摸事件支持:对于触摸屏设备,考虑替换或支持触摸事件,如 touchstart, touchend,以及确保页面在触摸设备上的交互流畅。

8. 滚动和加载更多
对于长列表、无限滚动等情况,需要优化滚动和加载行为。
滚动加载更多

检测滚动位置:当用户滚动到页面底部时,触发更多数据的加载。可以结合节流来减少滚动事件的触发频率。
const handleScroll = () => {
  if (window.innerHeight + document.documentElement.scrollTop === document.documentElement.offsetHeight) {
    // 加载更多数据
  }
};

#前端# #实习##ai智能作图#
全部评论
用了这个ai作图 不仅吞内容 而且删除不掉 前端给我出来背锅
1 回复 分享
发布于 12-06 18:19 北京

相关推荐

12-16 21:16
快手_前端开发
老生常谈的问题 很多同学都喜欢在简历上说自己会性能优化 但是问起来也没几个能说明白 在项目中实现难点并且实现和逻辑闭环 这就是一个亮点内容太多了 什么拆包啊 ssr啊 什么资源优化资源去重啊 缓存啊 cdn的协议啊 参考前一篇这篇举一个例子 我要讲的是不基于架构限制的优化 就是关于有大量数据 我们怎么优化前端的渲染方式很多同学可能上来就说 懒加载啊 虚拟列表啊 按需加载啊 甚至是web worker啊 减少重排重绘啊 甚至是SSR 预渲染倒是也没毛病就是首选我们要讲逻辑 主要的数据量大的场景包括列表,表格,选择器,图表等比如说 你在写demo练手 这个时候 页面卡顿了 不要烦躁 你造亮点拿大厂offer的机会就在眼前了我们要对症下药 这个是因为dom元素数量过多 还是js执行的时间过长 还是大量的回流重绘呢大家都做过分页 这就是最常见的一种处理方式 直接就避免了大量的dom渲染如果你做了搜索的下拉选项功能 最好需要在前端或者后端加一下选型的一个限制但如果是一些不适合做分页的场景 比如说移动端下的h5页面 我们首先是可以考虑去做时间分片 去加载 比如说requestAnimationframe等 可以去搜相关文章对于h5 可能大家都会处理的就是触底加载 但滑了多了 还是会卡顿 这个时候 我们才会去说 用虚拟列表去解决 而不是上来就用 那你怎么去说服面试官他的使用场景呢 讲虚拟列表的文章 不要太多 就是技术文章其实是无限的 你也看不完 要结合你的场景 有故事 才有offer#简历中的项目经历要怎么写##现在前端的就业环境真的很差吗##我的失利项目复盘##没有实习经历,还有机会进大厂吗##那些拿到大厂offer的简历长啥样##前端#
点赞 评论 收藏
分享
评论
4
收藏
分享
牛客网
牛客企业服务