分享一些初入前端的心得

简介: 从步入岗位以来,时至今日前端开发已过半载,技能上虽没有飞跃性的提升,但相比最初的时候也是积累了一些开发经验,现做个总结并分享给大家,同时记录下个人的成长经历,其中不对或不准确的地方希望大家指正批评。

从步入岗位以来,时至今日前端开发已过半载,技能上虽没有飞跃性的提升,但相比最初的时候也是积累了一些开发经验,现做个总结并分享给大家,同时记录下个人的成长经历,其中不对或不准确的地方希望大家指正批评。
在项目正式着手写代码前,首先要对需求有一个明确的理解,把整个项目功能串起来,才能更好的理解个人承担的模块。后端开发关注的是业务功能逻辑,而我们前端开发更注重的是页面交互逻辑与呈现出的视觉效果,对UED图有更高的依赖性。
分支管理规范,虽然可以使用一个分支完成开发,但假如有什么失误操作,处理起来会很繁琐,因此应严格按照规范进行分支管理。比如一个需求id,就是一个feature分支。严格按照规范开发,虽然有些麻烦,但总体是利大于弊的,应养成这个良好习惯。
熟悉一下项目的基本配置,由于开发过程中会遇到各种各样的情况,每种情况可能又要更改不同的配置,比如调试过程中是测试环境还是预发环境,或者打包时用的哪个打包后缀等,反正我第一次接触这些时,真的是一脸懵。
接下来就是关于日常开发的,写出的都是一些比较基本的内容,如果有不对的地方还望指正批评。
关于静态页面:当拿到ued图后,要熟悉整体的设计风格,然后重点关注自己要着手开发的模块。模块的最外层宽度尽量不要写固定数值,如果用固定宽度,当后期拉取别人代码后,整体布局可能会发生意想不到的效果。
image.png
比如上图中框选部分,此处使用width100%,撑满架构预留的右侧部分即可,最外层使用百分比布局可粗略实现自适应的效果。使用html中已有的语义化标签,例如,绘制某一列表页,循环遍历某一元素时,应该使用:


  • 元素
  • 元素

这种形式,更加一目了然,提高代码的易读性。
还有就是应该多熟悉css的现有属性,有很多情况可以使用内置的方法实现,而不是从头手动实现,遇到陌生的属性养成多查多记的良好习惯。
关于框架:react是一款高效的单页面应用开发框架,熟练使用可做到事半功倍的效用。现今对个人的使用做一下总结与分享。state,保存变量的地方,这里定义的变量对于当前文件来讲属于全局变量,只要使用之前将其解构出来就可以读取该值。无论哪里将state值改变,引用他的地方都会拿到最新值,但也有特殊情况,比如this.setState(),如果想在this.setState()的所在函数内取到最新值,应在setState的第二个参数写回调函数才能实现,例如:this.setState({ newNum: 666 }, () => console.log(this.state.newNum)),
这样才能打印出666,如果不写在这个位置,所得到值会是上一次变化的值。
然后是react的生命周期,拿较为常用的componentDidMount与componentDidUpdate进行举例,componentDidMount:该方法会在组件已经被渲染到 DOM 中后运行,但我个人比较简单粗暴的记忆方法是当你看到页面内容之前执行一次。比如页面需要某些数据时,在这个方法中执行获取数据的具体方法并交给state对象,当页面完全加载完成后就会展示出这些数据。(官方文档原话:componentDidMount() 会在组件挂载后(插入 DOM 树中)立即调用。依赖于 DOM 节点的初始化应该放在这里。如需通过网络请求获取数据,此处是实例化请求的好地方);
componentDidUpdate:这个方法是当某一props或state发生变化时调用,最常见的用法是componentDidUpdate(prevProps) {
if (this.props.userID !== prevProps.userID) {
this.fetchData(this.props.userID);

}
},
这个方法在比较变量更新变化应该做什么处理时,更为好用。

关于react的hook写法,个人比较推荐这种写法,虽然不至于完全取代class类的写法,但这是react的大体趋势,这里与class没有过多的区别,本人认为最大的区别就是对生命周期的使用。Hook的生命周期用法更加简单简洁,
useEffect(() => {
console.log(6666)
}, [count]); // 仅在 count 更改时打印6666
这个useEffect的第二个参数更加好理解,react会监听这里的‘count’,只有它发生变化时才会执行里面的主题代码,当然不只监听一个变量,可以是很多个。

关于组件化开发:react最强大的地方就是组件化开发。日常开发中,比如某一工具会在多处使用到,就可以把这个工具单独写成一个组件,在使用时直接导入该组件并配置上所需的一些属性或方法就可以直接使用了。或者是开发某一较为复杂的页面时,可以将同一部分或内容独立抽离成一个组件,在另一文件下进行开发,如下图:
image.png
这样的风格充分利用了react的组件化开发,不仅阅读与维护更加简洁明了,同时也提高了多人协作时的效率。

善于封装全局高频率使用的小组件:比如‘img’。使用img标签时,经常要考虑到当路径错误或无法正常加载图片时,如何设置默认的兜底图,虽然处理该事件较为简单,但是每用到一次就要配置一次,还是比较麻烦的。所以封装一个全局的img组件是有必要的。比如下面代码:
image.png
该组件会监视传进来的图片路径,配合key属性,会保证当前显示的为最新数据的图片路径,使用时也更加便捷,使用示例:
image.png
只需传入动态路径、兜底路径已经唯一的标识键就可以放心使用了,减少了每次引用原生img标签时的容错操作。

关于antd:这是一个封装好的插件工具,提供了大量项目中会用到的各类常见插件,当然,像这种插件,没有必要各个都非常熟悉,但一些通用的常用属性或方法还是应该多记一记的,或者是把感兴趣的东西写个demo,以便记忆与理解。平时多看一看,心中有个印象,用的时候就很自然的有‘有个东西好像和我要用的是一样的’印象了。

关于具体功能开发:以前有段时间光顾实现目的,而忽略了代码本身,比如明明可以20行完成,而我绕来绕去50行写完,即使意识到这种写法不好,也不愿意主动去优化,从而导致被项目负责人多次提醒。应杜绝这种陋习,当实现与验证功能后,做一次优化,写一下该有的注释,否则就是给自己挖坑,同时也给他人带来一定的不必要的麻烦。

关于前后端的联调,当进行到这里的时候,静态页面与逻辑方法也基本写完,但自己造的假数据与后台返回的真实数据还是有一定的出入的,因此联调是一个很重要的开发环节。关于联调,主要关注这两个地方:想要的数据与返回的数据是否对齐、请求参数与请求的时机是否正确。如果数据没有对齐,要么我们自己进行数据处理,要么由后端同学处理好后再返回给我们;什么条件下调什么接口,传参的格式正确配置。如果保证这两点,那么基本就不会出现什么错误情况了。在这里推荐一个小工具,就是JSON在线解析,有些情况后端同学会直接给一个JSON格式的字符串,我们调试的时候阅读很麻烦,用这个在线解析,就会显示出具有层级关系的数据格式,比较好用。

以上就是本人半年来积累的一些实际经验,虽然含金量不高,但也算情真意切哈哈,大佬们看到这些可能会想起刚入职的情形,入职不久的同学们读后也是一个相互学习的过程,如果有表述不对的地方也希望大家不吝赐教,一起共同进步,感谢有你,期待相遇!

相关文章
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
解决RAG检索瓶颈:RAPL线图转换让知识图谱检索准确率提升40%
本文探讨了RAPL框架,一种创新的人工智能架构,用于改进知识图谱环境下的检索增强生成系统。RAPL通过线图转换和合理化监督技术,构建高效且可泛化的检索器,显著提升大型语言模型在知识问答中的准确性和可解释性。文章分析了现有RAG系统的缺陷,即最短路径并非总是合理路径,并提出RAPL的三步解决方案:利用大型语言模型生成高质量训练数据、将知识图谱转换为线图以实现基于路径的推理,以及通过双向图神经网络进行路径检索。实验结果表明,RAPL不仅提高了检索精度,还缩小了小型与大型语言模型间的性能差距,推动了更高效、透明的AI系统发展。
160 4
解决RAG检索瓶颈:RAPL线图转换让知识图谱检索准确率提升40%
|
6月前
|
存储 数据库
《仿盒马》app开发技术分享-- 商品搜索页(搜索记录&商品搜索)(38)
上一节我们新建了商品搜索页,实现了顶部的搜索bar以及下方的推荐搜索列表,这一节我们要新增一个商品搜索记录列表,以及输入内容之后搜索出对应商品的功能,我们还需要保证搜索内容的唯一性,以及搜索记录的本地数据持久化和搜索记录列表的删除
127 2
|
11月前
|
存储 分布式计算 Hadoop
MPP 架构与 Hadoop 架构技术选型指南
MPP架构与Hadoop架构是处理海量数据的两大选择。MPP通过大规模并行处理实现快速查询响应,适用于企业级数据仓库和OLAP应用;Hadoop则以分布式存储和计算为核心,擅长处理非结构化数据和大数据分析。两者各有优劣,MPP适合结构化数据和高性能需求场景,而Hadoop在扩展性和容错性上表现更佳。选择时需综合考虑业务需求、预算和技术能力。
1252 14
|
SQL JavaScript 前端开发
简单用Nodejs + express 编写接口
【6月更文挑战第3天】该文介绍了如何在Node.js和Express中创建GET和POST接口。首先,简要提到了准备工作,建议查阅上一篇文章。接着展示了GET接口的示例,说明可以直接在浏览器中请求。然后,详细解释了POST接口的步骤,包括引入Express模块、设置路由处理程序、解析请求体及处理请求。最后,强调了编写接口时应注意错误处理、安全性、中间件使用、路由组织、日志记录、性能优化和测试等关键点。作者以肥晨的身份结尾,鼓励关注其分享的前端学习资料和技术动态。
409 1
Mybatis-Plus实现Service封装
Mybatis-Plus实现Service封装
496 1
|
Go
使用go组合卦象并解读运势
【5月更文挑战第3天】该文介绍了通过编程方式模拟每日运势占卜,使用Go语言定义了64卦的数据结构,并提供了解卦、比较列表和显示卦象的函数。最后,鼓励读者尝试并提出问题。
199 0
使用go组合卦象并解读运势
|
弹性计算 虚拟化 异构计算
阿里云GPU服务器价格表(Nvidia M40/P100/P4/V100)
阿里云GPU服务器价格表(Nvidia M40/P100/P4/V100)
1631 0
|
IDE 算法 自动驾驶
一文搞懂CAN和CAN FD总线协议
这篇文章是将一文搞懂CAN总线协议帧格式和一文搞懂CAN FD总线协议帧格式两篇文章的整合,方便各位朋友学习和查阅。
|
存储 Java 数据库
flink 状态后端详解
flink 状态后端详解
flink 状态后端详解
|
JavaScript 网络协议 PHP
使用阿里云npm镜像加速
npm(node package manager)是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用。 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。 由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了。同样可以通过输入 "npm -v" 来测试是否成功安装。命令如下,出现版本提示表示安装成功
54335 4