另一个视角看待这次 antd

公众号相信大家今天都已经知道了 antd 这次的事故了,不知道的简单回顾一下。 今天圣诞节,所以在 type 是 primary 的 Button 上都加上了雪花。 就是在 antd 3.9.3 的时候增加了一个定时器,到 12 月 25 的时候增加一个 christmas 的 css 类,还给 title 改为了 Ho Ho Ho。具体 commit 见:https://github.com/ant-design/ant-design/commit/00aebeb9756afecc884ad48486084836b9a2707a 然后就导致今天开发者早上一来看,就觉得莫名其妙,还以为是病毒啥的,还有人因此被解雇(issue 上说的,不知道是否是真),总之,这个事情还是挺严重的。 作为一个有温度的前端号,肯定不是带你们吃瓜的,要是带你们吃瓜,肯定大早上的这篇文章就出来了,我们从另外的角度来看下这个问题。 功不抵过 开源及责任 批评没有任何好处 功不抵过 Antd 作为全世界最好的 React 前端组件库之一,目前将近 4 万的 star,国内外很多企业都会使用 antd 做前端开发。 我估计最近几年大部分人接触 React 的人,使用的 UI 库都会是 antd,Vue 的话可能 Element UI 和 iView 还可以拼杀一下,但是 antd 在 React 界是绝对的老大,这是 antd 的功。 但是这一次彩蛋事件,就导致很多人因此而放弃它。 然后网上骂声一片。 这是为什么呢? 因为这次失误触犯了使用者的底线,本来使用 antd 就是因为他的稳定,用起来放心。 结果这个彩蛋,出其不意,在没有给用户任何提示的情况下,悄悄的代码里面加一些“副作用”,导致让用户感觉用 antd 不再放心,担心下次加点获取用户信息啥的。...

1 min · 139 words · 桃翁

我不喜欢这世界,我只喜欢你

我这人运气一向不好,我这辈子最幸运的事大概就是遇见你,所以我特别特别珍惜,长这么大唯一坚持下来的事情就是爱你。 反正得听你啰嗦一辈子,习惯就好。 因为只有在我面前,她可以不用坚强。 但我知道,一想到能和你共度余生,我就对余生充满期待。 ...

1 min · 19 words · 桃翁

我也想做自己喜欢做的事儿

我今天看到一视频,给了我非常大感触。是 B 站上的一个视频,标题名叫:《这有可能是我最后一期视频了,再见了 B 站》, 视频链接可以点击「原文链接」得到。 这个视频大概讲的是这样: 一个富二代,大学毕业以后没有去家里帮爸妈,由于自己非常喜欢游戏,所以就想做自媒体,自己赚钱养自己,做了差不多一年半,在 B 站拥有不多不少的 25 万粉丝,由于他自己喜欢的是单机游戏,但是国内喜欢单机游戏的人太少,所以在 B 站涨粉缓慢,慢慢的,迫于生计,不得追求快速涨粉,不至于入不敷出。 所以就开始做一些自己不喜欢的视频,比如热点视频,电影娱乐等,因为这些看的人多,涨粉相对较快,但是自己并不喜欢这些视频。以前自己做的游戏视频做完之后会回味好几遍,但是现在做的这些视频自己非常不喜欢,做完之后完全没有动力去看。 突然有一天他的爸妈给他买了一套 1600 万的房子,加上装修可能 1700 万左右,但是他爸妈只付了首付(他爸妈能全款买得起),剩下的贷款要让他自己还,目的就是要让他回去帮家里的忙,因为他做自媒体根本换不起这个贷款。 一个月贷款要还 3 万多,他做 B 站一年半才赚了 10 万,他爸妈就质问他,你觉得你做现在这个职业有前途吗?能还得起这个房贷吗?如果将来你的儿子想住这么大的房子你买得起吗? 他就开始思考当初的初心,自己做自媒体是为了赚钱,现在家里有四个厂,家里父母也 50 了,回去帮忙岂不是能花更少的时间赚更多的钱。 所以他就关了自己的工作室,不再做自己不喜欢的视频,并且回家去继承家业。 看完这段视频莫名的感到了一丝心酸和无奈。 心酸的是很多做自媒体(包括我自己)的刚开始都是做自己喜欢的东西,后来慢慢的为了粉丝向营销号靠拢,远离了自己的初心,这视频作者可以回家继承家产,而剩下的那些远离了初心的人又会何去何从呢? 无奈的是即使家里这么有钱,不想靠着父母打拼出一番事业,但是在房贷的压力下,以及对自己能力确实不太能够打拼出一番事业,最后只能回家靠父母的无奈。 这种富二代他们一次一次的失败之后,还是会有退路(回家继承家产),但是对于我们普通人来说,就没有退路,只能向前冲,就得努力赚钱。 但是在自己能力还没到的时候,做自己想做的事的时候,又赚不了那么多钱,所以只能违背这自己的初心,去赚一些合法的钱。 在这种金钱和自己喜欢的东西做斗争的时候,我无法给出应该选择哪种的建议。可能站在局外人来说,当然做自己喜欢的事儿呀,把事情做好,然后赚钱是自然的。 道理谁都懂,但是我觉得这是在考验人性的时候,当这件事儿发生在你的身上可能就不一定会这么做,因为我遇到太多太多这样的人了,只有非常少数的人能坚持自己的原则,这种人往往就缺少一个贵人,等待一个爆发期,但是在爆发期来临之前,又有多少人能坚持下来呢,很难说。 最后想说的是还是想做那个最初想做的人,把这个公众号做成自己喜欢的样子,提供一些在其他地方看不到的稀缺的有价值的东西,跟我公众号的 slogon 一样:成为自己想成为的那个样子。 每天花一小时来写文章,而不是花半个小时来找一篇好的文章。 其实我很希望你们可以给我多留言,多跟我交流你们的想法,而不是向我提一些问题,让我解答,两者之间的区别在于我们两是否在同一个水平,是否双方都会受益。 所以我喜欢你在请教我一些东西的时候,你已经做好了功课,咱们在此次对话中花了这么多时间,都能得到一些价值。 虽然我不是一个大 V,但是我还是很忙,有我自己的事儿,每天向我请教的人又特别多,我目前不想专门开一个付费的知识星球来回答问题,然后出售我的时间。 如果你希望和我交流,可以在公众号后台回复「微信」,联系到我。 最后如果你还愿意继续关注我的话,可以留个言,点个好看,甚至帮我多转发文章。

1 min · 48 words · 桃翁

根据 React 历史来聊如何理解虚拟 DOM

最近我发现很多面试题里面都有「如何理解虚拟 DOM」这个题,我觉得这个题应该没有想象中那么好答,因为很多人没有真正理解虚拟 DOM 它的价值所在,我这篇从虚拟 DOM 的诞生过程来引出它的价值以及历史地位,帮助你深入的理解它。 什么是虚拟DOM 本质上是 JavaScript 对象,这个对象就是更加轻量级的对 DOM 的描述。 对,就是这么简单! 就是一个复杂一点的对象而已,没什么好说的,重点是为什么要有这个东西,以及有了这个描述有什么好处才是我们今天要介绍的内容。 为什么要有虚拟DOM 再谈为什么要用虚拟 DOM 之前,先来聊一聊 React 是怎么诞生的,毕竟在了解历史背景,再去思考他的诞生,就知道是必然会出现的。 再查了很多关于 React 的历史相关的文章,这篇文章我感觉比较值得令我信服:React 是怎样炼成的。 众所周知,Facebook 是 PHP 大户,所以 React 最开始的灵感就来至于 PHP。 字符串拼接时代 - 2004 在 2004 年这个时候,大家都还在用 PHP 的字符串拼接来开发网站: $str = '<ul>'; foreach ($talks as $talk) { $str += '<li>' . $talk->name . '</li>'; } $str += '</ul>'; 这种方式代码写出来不好看不说,还容易造成 XSS 等安全问题。 应对方法是对用户的任何输入都进行转义(Escape)。但是如果对字符串进行多次转义,那么反转义的次数也必须是相同的,否则会无法得到原内容。如果又不小心把 HTML 标签(Markup)给转义了,那么 HTML 标签会直接显示给用户,从而导致很差的用户体验。 XHP 时代 - 2010 到了 2010 年,为了更加高效的编码,同时也避免转义 HTML 标签的错误,Facebook 开发了 XHP 。XHP 是对 PHP 的语法拓展,它允许开发者直接在 PHP 中使用 HTML 标签,而不再使用字符串。...

3 min · 550 words · 桃翁

认识函数式编程

最开始接触函数式编程的时候是在小米工作的时候,那个时候看老大以前写的代码各种 compose,然后一些 ramda 的一些工具函数,看着很吃力,然后极力吐槽函数式编程,现在回想起来,那个时候的自己真的是见识短浅,只想说,‘真香’。 最近在研究函数式编程,真的是在学习的过程中感觉自己的思维提升了很多,抽象能力大大的提高了,让我深深的感受到了函数式编程的魅力。所以我打算后面用 5 到 8 篇的篇幅,详细的介绍一下函数式编程的思想,基础、如何设计、测试等。 今天这篇文章主要介绍函数式编程的思想。 函数式编程有用吗? 什么是函数式编程? 函数式编程的优点。 面向对象编程(OOP)通过封装变化使得代码更易理解。 函数式编程(FP)通过最小化变化使得代码更易理解。 – Michacel Feathers(Twitter) 总所周知 JavaScript 是一种拥有很多共享状态的动态语言,慢慢的,代码就会积累足够的复杂性,变得笨拙难以维护。面向对象设计能帮我们在一定程度上解决这个问题,但是还不够。 由于有很多的状态,所以处理数据流和变化的传递显得尤为重要,不知道你们知道响应式编程与否,这种编程范式有助于处理 JavaScript 的异步或者事件响应。总之,当我们在设计应用程序的时候,我们应该考虑是否遵守了以下的设计原则。 可扩展性–我是否需要不断地重构代码来支持额外的功能? 易模块化–如果我更改了一个文件,另一个文件是否会受到影响? 可重用性–是否有很多重复的代码? 可测性–给这些函数添加单元测试是否让我纠结? 易推理性–我写的代码是否非结构化严重并难以推理? 我这能这么跟你说,一旦你学会了函数式编程,这些问题迎刃而解,本来函数式编程就是这个思想,一旦你掌握了函数式,然后你再学习响应式编程那就比较容易懂了,这是我亲身体会的。我之前在学 Rxjs 的时候是真的痛苦,说实话,Rxjs 是我学过最难的库了,没有之一。在经历过痛苦的一两个月之后,有些东西还是不能融会贯通,知道我最近研究函数式编程,才觉得是理所当然。毫无夸张,我也尽量在后面的文章中给大家介绍一下 Rxjs,这个话题我也在公司分享过。 什么是函数式编程? 简单来说,函数式编程是一种强调以函数使用为主的软件开发风格。看到这句我想你还是一脸懵逼,不知道函数式编程是啥,不要着急,看到最后我相信你会明白的。 还有一点你要记住,函数式编程的目的是使用函数来抽象作用在数据之上的控制流和操作,从而在系统中消除副作用并减少对状态的改变。 下面我们通过例子来简单的演示一下函数式编程的魅力。 现在的需求就是输出在网页上输出 “Hello World”。 可能初学者会这么写。 document.querySelector('#msg').innerHTML = '<h1>Hello World</h1>' 这个程序很简单,但是所有代码都是死的,不能重用,如果想改变消息的格式、内容等就需要重写整个表达式,所以可能有经验的前端开发者会这么写。 function printMessage(elementId, format, message) { document.querySelector(elementId).innerHTML = `<${format}>${message}</${format}>` } printMessage('msg', 'h1', 'Hello World') 这样确实有所改进,但是任然不是一段可重用的代码,如果是要将文本写入文件,不是非 HTML,或者我想重复的显示 Hello World。 那么作为一个函数式开发者会怎么写这段代码呢? const printMessage = compose(addToDom('msg'), h1, echo) printMessage('Hello World') 解释一下这段代码,其中的 h1 和 echo 都是函数,addToDom 很明显也能看出它是函数,那么我们为什么要写成这样呢?看起来多了很多函数一样。...

2 min · 364 words · 桃翁