本专栏(FE weekly news)文章争取每周一更,但由于精力有限,每篇周报的内容可能不多,欢迎大家关注
新闻
-
The “Skeleton Squad” is now targeting NPM
Socket团队发现npm生态最近被一些bad coder盯上了,它们已经开始尝试攻击npm用户。
文章
1. Things you forgot (or never knew) because of React
作者对React大胆开炮(我先说我只是文章的翻译工,React Fans不要攻击我,我对框架没有特别的偏好,不站队。逃走─=≡Σ(((つ•̀ω•́)つ)
文章的主要观点是,不可否认,React对前端的贡献巨大,Hooks的提出、服务端渲染的支持、以及很多让前端往前大迈步的想法都与React密切相关,但这不代表React现在的表现仍然是No.1, 前端领域的很多框架都是在 React 核心理念的基础上迭代后的产物,他们的表现很可能比React更好,作者呼吁各位开发者不要再盲目崇拜React。
关于文章中提出的React的不足,我总结一下:
- 对web components的支持: React竟然直到现在,仍然缺乏对web components的支持(尽管这一功能一直放在React开发团队的todo list上,但是这个todo,要什么时候do,遥遥无期。)
- 学习成本:对于React外的框架,你学会了使用一个框架,再学其他的几乎没难度,甚至可以直接上手用。相反的,React的各种规则与市面上其他框架大不相同,且学习难度要比其他框架大的多(React的很多规则是根据 08 年的限制条件设计制定的规则,放在现代来看,完全没必要,且它所基于的架构决策早已成为其迭代能力的障碍)。
- (与其他框架/vanilla JavaScript的)兼容性差: 如第2点所说,很多东西是React特有的规则,这导致哪怕是原生js的工具包,在React项目中都有可能会导致渲染周期或其他未知的问题,更别说把为React写的包用到其他地方了。(作为拉踩,作者用Preact Signals 举例,它可以单独拉出来用在任何框架中,甚至是vanilla JavaScript)
- 开发者要关心、考虑的事情太多了: 现代框架大多已经足够聪明,不需要开发者一步一步告诉他们下一步要去做什么,React则需要开发者考虑各种渲染周期中的微观规则,这大大消耗了开发者的心力。
- 表单处理繁琐:很多框架都通过双向绑定来实现了状态&DOM的自动更新,React则需要用户每次都手动更改状态值。诚然其他框架的便捷规则可能会导致一些麻烦,但对比起来,React的教条式规则带来的麻烦可能更多。
- 没有一个first-party css scoped方案。很多框架都内置了scoped css方案,React则需要开发者去自己选择&寻找合适的方案。
- Hooks不好用: 很多现代框架同样提供了Hooks,且规则更少,使用更简单。而React,他的规则实在是弯弯绕绕晦涩难懂....UseEffect有多难用就不用多说了,甚至有的开发者会尽量避免使用UseEffect,一个如此普通且必要的工具,竟然会让人害怕去使用,这本身就说明它存在着很大问题。
- 性能一般:目前网上已经有了大量的测试,其结果证明很多框架的性能(打包后代码的大小和页面的执行速度)都与 React 不相上下,甚至更好(在最新的JS web frameworks benchmark中表明, React比 Solid 慢近 50%,比 Vue 慢 25%,比 Svelte 慢 40%,比 Preact 慢 35%)
2. You Dont Need Lodash Underscore
Lodash和Underscore是伟大的js工具库,但随着js的发展,很多api都已经被native js实现了(如果你想让这些native js在legacy JS引擎中兼容,可以借助es5-shim)。因此,在使用Lodash和Underscore时,你要考虑一下,你是否真的有引入他们的必要:
-
通过eslint的
eslint-plugin-you-dont-need-lodash-underscore插件,可以校验你当前对lodash的使用是否有必要。 -
如果native js没有实现这个api,文章里也提供了很多Lodash api的实现方式,供开发者借鉴。