来到公司第二周了,开始接各种小需求,几个联运官网加一个4366官网,第一种公司有自主系统可以生成网页,第二种虽然要手写代码,但其实已经有模版一样的页面可以参考,所以实际上是用了别人的代码再加上修改样式即可。
虽然是些重复的工作,但是还是能在工作中,包括一些跟同事的交流学到东西,学的东西目前零零碎碎,主要集中在webpack的配置,React的知识点和一些样式问题和一些对程序员的思考。
第一个建大楼的人
每次上班的时候都会路过几片工地,看到一座座大楼在慢慢建起,看着那些钢筋都在好奇这些楼都是怎么一步一步搭起来的,会很难吗,看着公司旁边那座大厦,想:建起第一座大楼一定是最难的,后面的都不是最难,因为已经有第一座的模版可以参考,照着搭一座,再考虑自身的问题加上一些配置就行。写代码也是这样,第一个写出React的人绝对是最牛的,后人再造的都是走在前任的路上,如果写业务代码应该也是如此,很多页面都已经有人写过了,只要照着写都能写出七七八八。如果只是考虑完成而不研究写法的话。
“难”,“复杂”和“繁琐”
再有就是接触新东西的恐惧,这个东西其实才是困扰人学习新东西的最大障碍,实际上学新东西有分“难”,“复杂”和“繁琐”,分清楚这三个状况,其实学东西大部分都是在“复杂”和“繁琐”上。
举个例子,昨晚我写一个React的音乐播放器,需要用到React-Router,弄了很久都不得其法,搞不懂怎么用,但这是难吗?实际上我只是搜索不到,花了很多方式都搜索不到怎么用而已,这是繁琐,这个过程消耗智力吗?不消耗。后来,我在那个课程下面的评论下面早就有人给出了React-Router v4的写法,我只要照着写就实现了。再结合之前搜索的时候看的几个视频,算是对React-Router有了很初步的了解。
要写一个SPA难吗?那么多组件,状态管理,路由...这么多东西要搞,也只是有那么多东西要搞,这是“复杂”,克服讨厌复杂的情绪,要做的就是踏踏实实,一个一个组件写,难吗,不难,除了写的过程中一些不注意导致出的BUG,根据提示解决或者Google解决。
拿来就是用
其实对新东西,要有老子不管,拿来就是用的心态,不要怕这个东西是自己没见过的,想想自己用新手机的时候,总是会这里试试那里试试,难吗?看你愿不愿意解除而已。这个感触来源于教老妈用微信发朋友圈,对我们来说可能就是点几个按钮,看文字就能懂的过程,但是老妈就是学了几次但是好像总是用不好,明明看文字就能用的功能,她不识字吗,她识字,只是在要使用这些功能的时候,脑袋里一团乱麻,总是觉得“好复杂好复杂”
所以所以,不要有这种抗拒心理,放轻松你的大脑,无论是在接触新东西的时候,还是看到控制台红红的Error的时候。
印象最深的还有一个是看到函数式编程里的“高阶函数”这个词的时候 —— WTF!什么是高阶函数!高阶!好厉害!好复杂,头好痛!而所谓高阶函数的解释是:
在数学和计算机科学中,高阶函数是至少满足下列一个条件的函数:
- 接受一个或多个函数作为输入
- 输出一个函数
——维基百科
就是这么简单!没什么大不了的!所以克服“新名词恐惧症”吧!拥抱它!
说了这么多心理上的想法,说点在工作上接触到的东西吧。
一个就是终于接触到真实的工作环境了,以前以为前端写的网页打包出来后要把源文件交给后端的,让后端去配配各种东西然后上线。来公司后才发现,原来有个叫发布器的东西,拿游戏官网来说,每个游戏有一个专区,一个专区里放这个游戏的网站,JS、CSS、图片放在专区的文件管理中,上传上去后马上有一段地址,引用这段地址就引用到了相应的脚本和静态资源,所以要在打包时把图片什么的保存路径写成网址的形式。
网页写好之后,还要分离各个部分,因为要让运营的人去替换网站的图片什么的,而分离的各部分都可以在网站里复用,比如分离出了头部导航,头部导航在首页、新闻页、文章页都是用得上的。更改了独立出来的头部导航,其他页面都会发生变化,避免重复修改。
然后就是各种工作流程,比如排期,要求网站在排期这段时间内搞定。需求系统,完成任务要提交任务进度...
还有就是跟同事的交流,跟ZW哥交流发现是个喜欢做底层的人啊,不想做重复劳动的程序员,拥抱新的东西,不想走jQuery那一套,跟他交流问他怎么快速入门一个工具或者库,他说他也喜欢看视频,可以快速上手,或者在工具的Github上都有一个examples的文件夹,里面的demo可以让你快速上手。还有他的一手看测试用例学源码。这周开完会有技术分享,他分享了一个Redux的我也不知道什么鬼,直接怼源码,看得我一愣一愣的。大家都是这个水平的!跟YH师兄讨论说觉得会造轮子的人比会做业务的人牛逼,他说做业务的人才比造轮子的牛逼,因为造轮子的人有以前的轮子可以模仿。
最后说点实际的代码上的东西,这周上半段搞得最多的还是Webpack的配置,一周比一周理解的多,但其实还有一些理不清的。
- 首先就是知道了为什么Webpack要分两套配置,一份开发时配置文件保存在本地,一份生产配置保存线上地址
- devtool只是在开始时有用,选择要用什么样的sourcemap,越详细的sourcemap要花的编译时间更长
- entry为何要有多个入口,并不是之前理解的用来把SPA转为多页应用,而是当我们做网页的时候,可能多个网页可以用到同一套JS、CSS或者图片,拿游戏官网来说,他有一个首页,也有一个列表页和文章页,这三个页面用到的样式什么的会有交叉的部分,或者说我们需要同时开发这三个网页,就开多个入口,同时开发三个网页,只有一个webpack,然后在HtmlWebpackPlugin中,在chunks配置里可以决定页面要引入的是哪个chunks的js.
- development下编译的文件是不会存在本地的,而是放在内存中,在文件夹里是找不到的,只有打包好后的才能在dist文件夹中找到。
- webpack2不支持IE8,所以开发环境下是不能在IE8下打开查看页面效果的,这个觉得应该是跟JS的引入方式有关,webpack1支持IE8,所以他们那套官网模版用webpack1开发的就可以在开发环境下用IE8打开。
- 还有一个搞了很久的图片保存路径问题,在url-loader上,url-loader的name选项会修改文件保存路径为name的值,但是修改后的值加上我自己写的值组合起来后的地址很奇怪,并不能正确引用到,搞了很久,最后是在发布区的文件管理的Img里又创了一个images文件夹,实在是不优雅..
- 入口文件(index.js)是给webpack看的,所以要把scss引到index.js中,webpack才能把scss文件打包进来
更多webpack支持IE8的资料可以看让Webpack+Babel支持IE8
再有就是看同事的代码,jQuery的,发现他把部分代码放在一个对象中,这样调用对象的属性的方式调用函数,特别优雅,还有把onclick和onmouseover两个事件函数整合在一个代码中,只能说6666.
- index.js可能大部分都只是用来引入其他模块的。
接着就是React的,看了文档,写了个React的播放器,记下几个坑
- setState()是异步的,是一种“请求”,所以不能在一个函数中setState后在下面马上获取最新的那个值
- componentDidMount只在初次渲染时触发
- 修改setState后触发的是componentDidUpdate,这个生命周期不会在初次渲染时触发
- React-Router v4的API和v2、v3的差很多
其实学了一个东西要么有很多总结要么有很多问题,像React的总结这么少说明学得还不够深,继续把那个音乐播放器开发完,总结有什么问题再回来补吧。