首页 > 其他分享 >前端新人初入职场的开发注意项

前端新人初入职场的开发注意项

时间:2024-12-03 17:34:04浏览次数:11  
标签:const 展示 新人 用户 列表 初入 tab 职场 加载

边界值的一些展现形态

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

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

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

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

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

if (error) {
  return <div className="error-message">加载失败,请重试。</div>;
}
  • 状态反馈:对于请求失败的场景,可以使用不同的状态反馈机制,如“重试”按钮,或在弹窗中显示一个带有错误信息的图标。

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

return loading ? <LoadingSpinner /> : <DataList />;

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

return loading ? <SkeletonLoader /> : <DataContent />;

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. 列表项展示和字段安全

当展示列表项时,需要注意以下一些常见问题:

数字精度处理
  • 浮点数精度:当列表项显示数字时,特别是涉及到金额、百分比等精确数据时,确保精度正确,避免浮动误差。

    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 检查。

    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) {
    // 加载更多数据
  }
};

 

原文:https://juejin.cn/post/7443651502366162982

标签:const,展示,新人,用户,列表,初入,tab,职场,加载
From: https://blog.csdn.net/gaotlantis/article/details/144192585

相关文章

  • 职场教你一招:用两张名片,创造双倍收入!
    职场新人教你一招:用两张名片,创造双倍收入!嘿,初入职场的你,是不是每天朝九晚五,忙得像个陀螺,月底一看工资条,心里还是有点小失落?别担心,今天我这个职场小透明就来给你支一招,如何用两张名片,悄悄实现你的财务自由梦。别急着笑,这可不是什么玄学,而是实打实的策略哦!首先,咱们得明白,财务自......
  • 职场晋升秘籍!把工作做到位,轻松脱颖而出
    书友们,不要错过了!我挖到了一本真正让我彻夜难眠的小说,情节跌宕起伏,角色鲜活得就像从书里跳出来陪你聊天。每一页都是新的惊喜,绝对让你欲罢不能。要是你也在寻找那种让人上瘾的阅读体验,这本书就是你的最佳选择,快来一起沉浸在这个非凡的故事中吧!《把工作做到位》作者:李屹之......
  • 初入堆的知识点
    初入堆堆申请堆简介堆是用malloc函数申请使用的。是虚拟地址空间的一块连续的线性区域,能够提供动态分配的内存,允许程序申请大小未知的内存,在用户与操作系统之间,作为动态内存管理的中间人,能够响应用户的申请内存请求,向操作系统申请内存,然后将返回给用户程序,管理用户所释放的内存......
  • 【新人系列】Python 入门(十四):文件操作
    ✍个人博客:https://blog.csdn.net/Newin2020?type=blog......
  • 初入isp职场心得v
        本人大学学的是电子信息工程的,对于图像处理有过学习,但都是基于算法来操作的,对于直接从软件来调试,还是第一次。初入isp职场真是又兴奋又紧张,不知道大家第一次进入isp职场都是什么心情,欢迎大家前来分享。我接触的第一款产品就是海思平台的,说实话现在的我对于平台毫无......
  • 很多人陷入了职场认知误区
    后台有同学留言,问了这样一个问题:从事软件测试工作三年了,主要做功能和接口测试,最近领导要求测试需要主动去review开发提交的代码,主动为团队的交付质量承担更多责任。这件事我应不应该去做?做了对自己有什么好处?很多同学在职场遇到问题时都会很犹豫,犹豫的原因一方面是分不清这个问......
  • 职场生存指南 | Java程序员入职新公司 (干货盛宴 !!!)
    目录一、拿到需求无从下手?二、程序员如何在职场上少走弯路?三、职场生存之道四、初入职场小白常犯的几大错误五、职场上遇到甩锅PUA怎么反击?Hello,大家好呀,我是小斜同学。最近有小伙伴反馈说成功入职了新公司,但是拿到需求以后不知道该怎么来做,感觉到无从下手,力不从心。......
  • 【题解】洛谷P3674: 小清新人渣的本愿
    P3674小清新人渣的本愿自己想出来了,好耶!!其实和兔子洞那题差不多,标记哪些数区间中出现了,因为bitset就相当于状压,也是支持位运算的,所以减法相当于右移\(x\)位后与运算,如果有交说明可以得到\(x\),加法就要额外维护\(g=f_{N-i}\),查询时直接查找\(f\)与\(g\)右移\(N-x\)位......
  • 初入C语言
    在接触编程开始之前先让我们了解一下计算机的组成。计算机系统是由硬件系统和软件系统两大部分组成。而计算机硬件由五个基本部分组成:运算器、控制器、存储器、输入设备和输出设备。硬件:组成计算机的各种物理部件。(⿏标,键盘)软件:计算机中运⾏的程序和数据。计算机的工作原理......
  • 职场小白必备!Win电脑简单又高效的5款工具软件
    初入职场,面对繁杂的工作任务,善用高效工具能让我们迅速上手,提升效率,轻松应对各种挑战。今天就给大家分享5款Windows电脑上简单易用且功能强大的工具软件,助力职场小白快速蜕变。一、Everything:文件搜索“闪电侠”刚踏入职场,电脑里文件越来越多,找个文档常常翻遍文件夹,耗时费力......