我曾经一度很迷茫,在学了Vue、React的实战开发和应用之后,好像遇到了一些瓶颈,不知道该怎样继续深刻下去。相信这也是不少一两年经验的前端工程师所遇到共同问题,这篇文章,笔者想结合本身的一些成长经历整理出一些路线,帮助各位初中级前端工程师少走一些弯路。 javascript
笔者毕业于一个很普通的本科学校,目前开发经验一共是2年8个月,目前带一个5人的团队,前任的组长让我带领团队的主要缘由是我的技术 + 沟通能力相对较好,可是在技术能力成长的背后我也走了很多弯路。 html
这篇文章会提到很是很是多的学习路线和连接,若是你还在初中级的阶段,没必要太焦虑,能够把这篇文章做为一个进阶的路线图
,在将来的时日里朝着这个方向努力就好。
我也并非说这篇文章是进阶高级工程师的惟一一条路线,若是你在业务上作的精进,亦或是能在沟通上八面玲珑,配合各方面力量把项目作的漂漂亮亮,那你也同样能够拥有这个头衔。本文只是我本身的一个成长路线总结。 前端
本篇文章面对的人群是开发经验1到3年的初中级前端工程师
,但愿能和大家交个心,帮助到大家少走一些弯路。 vue
已经晋升高级前端的同窗,欢迎你在评论区留下你的心得,补充个人一些缺失和不足。java
我整理了一篇中级前端的必备技术栈能力,写给女友的中级前端面试秘籍 。这篇文章里的技术栈固然都是须要扎实掌握的,(其实我本身也有一些漏缺,偷偷补一下)。 node
固然了,上进心十足的你不会一直知足于作中级前端,咱们要继续向上,升职加薪,迎娶白富美!react
冴羽大佬的这篇博客里,除了undescore的部分,你须要所有都能掌握。而且灵活的运用到开发中去。
JavaScript深刻系列、JavaScript专题系列、ES6系列webpack
tasks-microtasks-queues-and-schedulesios
剖析Promise内部结构,一步一步实现一个完整的、能经过全部Test case的Promise类
题外话,当时精炼这20行真的绕了我很久😂,可是搞明白了会有种恍然大悟的感受。这种异步队列的技巧要融会贯通。
对于Promise咱们很是熟悉了,进一步延伸到async await,这是目前开发中很是很是经常使用的异步处理方式,咱们最好是熟悉它的babel编译后的源码。
手写async await的最简实现(20行搞定)
babel对于async await配合generator函数,作的很是巧妙,这里面的思想咱们也要去学习,如何递归的处理一个串行的promise链?
这个技巧在axios的源码里也有应用。日常常常用的拦截器,本质上就是一串promise的串行执行。
固然,若是你还有余力的话,也能够继续深刻的去看generator函数的babel编译源码。不强制要求,毕竟generator函数在开发中已经用的很是少了。
ES6 系列之 Babel 将 Generator 编译成了什么样子
你必须精通异步场景下的错误处理,这是高级工程师必备的技能,若是开发中的异常被你写的库给吞掉了,那岂不是好笑。
Callback Promise Generator Async-Await 和异常处理的演进
你须要大概理解前端各个库中的插件
机制是如何实现的,在你本身开发一些库的时候也能融入本身适合的插件机制。
Koa的洋葱中间件,Redux的中间件,Axios的拦截器让你迷惑吗?实现一个精简版的就完全搞懂了。
对于一些复杂场景,你的开发不能再是if else
嵌套一把梭了,你须要把设计模式好好看一遍,在合适的场景下选择合适的设计模式。这里就推荐掘金小册吧,这个做者的质量我信得过。
JavaScript 设计模式核⼼原理与应⽤实践
掌握一些基础算法核心思想或简单算法问题,好比排序。
你须要知道组合优于继承的思想,不要再满口都是oop,写什么都来个class extends了,在前端ui扁平化的前提下,真的没那么多须要继承的场景。
https://medium.com/javascript...
“…the problem with object-oriented languages is they’ve got all this implicit environment that they carry around with them. You wanted a banana but what you got was a gorilla holding the banana and the entire jungle.” ~ Joe Armstrong — “Coders at Work”面向对象语言的问题在于它们带来了全部这些隐含的环境。
你想要一个香蕉,但你获得的是拿着香蕉和整个丛林的大猩猩。
你须要熟读clean-code-javascript,而且深刻结合到平常开发中,结合大家小组的场景制定本身的规范。
clean-code-javascript
对于高级工程师来讲,你必需要有一个你趁手的框架,它就像你手中的一把利剑,可以让你披荆斩棘,斩杀各类项目于马下。
下面我会分为Vue
和React
两个方面深刻去讲。
Vue方面的话,我主要是师从黄轶老师,跟着他认真走,基本上在Vue这方面你能够作到基本无敌。
对于Vue你必须很是熟练的运用,官网的api你基本上要所有过一遍。而且你要利用一些高级的api去实现巧妙的封装。举几个简单的例子。
slot-scope
去作一些数据和ui分离的封装。以vue-promised这个库为例。
Promised组件并不关注你的视图展现成什么样,它只是帮你管理异步流程,而且经过你传入的slot-scope
,在合适的时机把数据回抛给你,而且帮你去展现你传入的视图。
<template> <Promised :promise="usersPromise"> <!-- Use the "pending" slot to display a loading message --> <template v-slot:pending> <p>Loading...</p> </template> <!-- The default scoped slot will be used as the result --> <template v-slot="data"> <ul> <li v-for="user in data">{{ user.name }}</li> </ul> </template> <!-- The "rejected" scoped slot will be used if there is an error --> <template v-slot:rejected="error"> <p>Error: {{ error.message }}</p> </template> </Promised> </template>
Vue.extends
,配合项目作一些命令式api
的封装。而且知道它为何能够这样用。(须要具有源码知识)export const confirm = function(text, title, onConfirm = () => {}) { if (typeof title === "function") { onConfirm = title title = undefined } const ConfirmCtor = Vue.extend(Confirm) const getInstance = () => { if (!instanceCache) { instanceCache = new ConfirmCtor({ propsData: { text, title, onConfirm } }) // 生成dom instanceCache.$mount() document.body.appendChild(instanceCache.$el) } else { // 更新属性 instanceCache.text = text instanceCache.title = title instanceCache.onConfirm = onConfirm } return instanceCache } const instance = getInstance() // 确保更新的prop渲染到dom // 确保动画效果 Vue.nextTick(() => { instance.visible = true }) }
JSX
来编写你项目中的复杂组件了,好比在个人网易云音乐项目中,我遇到了一个复杂的音乐表格需求,支持搜索文字高亮、动态隐藏列等等。固然对于如今版本的Vue,JSX仍是不太好用,有不少属性须要写嵌套对象,这会形成不少没必要要的麻烦,好比没办法像React同样直接把外层组件传入的props透传下去,Vue3的rfc中提到会把vnode节点的属性进一步扁平化,咱们期待获得接近于React的完美JSX开发体验吧。
const tableAttrs = { attrs, on: { ...this.$listeners, ["row-click"]: this.onRowClick, }, props: { ...props, headerCellClassName: "title-th", cellClassName: this.tableCellClassName, data: this.songs, }, }
异步合并优化
的知识体系中去。Vue源码详解之nextTick:MutationObserver只是浮云,microtask才是核心!
带你完全搞懂Vue3的Proxy响应式原理!TypeScript从零实现基于Proxy的响应式库。
React已经进入了Hook为主的阶段,社区的各个库也都在积极拥抱Hook,虽然它还有不少陷阱和不足,可是这基本上是将来的方向没跑了。这篇文章里我会减小class组件的开发技巧的说起,毕竟好多不错的公司也已经全面拥抱Hook了。
你必须掌握官网中提到的全部技巧,就算没有使用过,你也要大概知道该在什么场景使用。
关于熟练应用,其实掘金的小册里有几个宝藏
acl
权限管理系统和router
路由管理,而且引入了reselect
作性能优化,你能够从中学习到这位大佬的不少思路。(悄悄告诉你,他的职级很是高)key
你必须熟练掌握Hook的技巧,除了官网文档熟读之外:
useEffect 完整指南
看完这篇之后,进入dan的博客主页,找出全部和Hook有关的,所有精读!
096.精读《useEffect 彻底指南》.md
注意!不是只看这一篇,而是这个仓库里全部有关于React Hook的文章都去看一遍,结合本身的思想分析。
仍是Dan老哥的文章,详细的讲清楚了所谓闭包陷阱
产生的缘由和设计中的权衡。
函数式组件与类组件有何不一样?
精读《Hooks 取数 - swr 源码》
Umi Hooks - 助力拥抱 React Hooks
React Hooks的体系设计之一 - 分层
React中优化组件重渲染,这里有几个隐含的知识点。
optimize-react-re-renders
使用@testing-library/react
测试组件,这个库相比起enzyme更好的缘由在于,它更注重于站在用户的角度去测试一个组件,而不是测试这个组件的实现细节。
@testing-library/react-hooks
测试自定义Hookhow-to-test-custom-react-hooks
Writing Type-Safe Polymorphic React Components (Without Crashing TypeScript)
10-typescript-pro-tips-patterns-with-or-without-react
when-to-break-up-a-component-into-multiple-components
state-colocation-will-make-your-react-app-faster
the-state-reducer-pattern-with-react-hooks
integrating-prettier-eslint-airbnb-style-guide-in-vscode
做为一个合格的前端工程师,必定要积极的深刻社区去了解最新的动向,好比在twitter
上关注你喜欢的技术开发人员,如Dan、尤雨溪。
另外Github上的不少issue也是宝藏讨论,我就以最近我对于Vue3的学习简单的举几个例子。
Why remove time slicing from vue3?
Amendment proposal to Function-based Component API
vue-composition-api-rfc 英文版文档,对于里面的设计思路叹为观止,学到了很是很是多尤大的思想。
总之,对于你喜欢的仓库,均可以去看看它的issue有没有看起来感兴趣的讨论,你也会学到很是多的东西。而且你能够和做者保持思路上的同步,这是很是可贵的一件事情。
我在狠狠的吸取了一波尤大对于Vue3 composition-api
的设计思路的讲解,新旧模式的对比之后,这篇文章就是我对Vue3新模式的一些看法。
Vue3 Composition-Api + TypeScript + 新型状态管理模式探索。
而且因为它和React Hook在不少方面的思想也很是相近,这甚至对于我在React Hook上的使用也大有裨益,好比代码组织的思路上,
为何Logical Concerns 优于Vue2和React Class Component的Option Types?看完detailed-design这个章节你就所有明白了,而且这会融入到你平常开发中去。
从初中级前端开始往高级前端进阶,有一个很重要的点,就是不少状况下国内社区能找到的资料已经不够用了,并且有不少优质资料也是从国外社区二手、三手翻译过来的,翻译质量也不能保证。
这就引伸出咱们进阶的第一个点,开始接受英文资料。
这里不少同窗说,个人英文能力不行啊,看不懂。其实我想说,笔者的英语能力也很通常,从去年开始我立了个目标,就是带着划词翻译插件也要开始艰难的看英文文章和资料,遇到不懂的单词就划出来看两眼(没有刻意去背),第五六次碰见这个单词的时候,就差很少记得它是什么意思了。
半年左右的时间下来,(大概保持每周3篇以上的阅读量)能肉眼可见的感受本身的英语能力在进步,不少时候不用划词翻译插件,也能够完整的阅读下来一段文章。
这里是我当时阅读英文优质文章的一些记录,
后面英文阅读慢慢成了一件比较天然的事情,也就没有再刻意去记录,前期能够用这种方式激励本身。
推荐两个英文站点吧,有不少高质量的前端文章。
medium可能须要借助一些科学工具才能查看,可是里面的会员付费以及做者激励机制使得文章很是的优质。登陆本身的谷歌帐号便可成为会员,前期可能首页不会推荐一些前端相关的文章,你能够本身去搜索关键字如Vue
、React
、Webpack
,任何你兴趣的前端技术栈,不须要过多久你的首页就会出现前端的推荐内容。好好享受这个高质量的英文社区吧。
本篇文章是我在这一年多的学习经历抽象中总结出来,还有不少东西我会陆续加入到这篇文章中去。
但愿做为初中级前端工程师的你,可以有所收获。若是可以帮助到你就是我最大的知足。
未完待续... 持续更新中。