hax / hax/hax.github.com

如何看待《React: CSS in JS》?

Open
#22 45 comments 1 reaction 0 assignees View on GitHub
主题研究
Dominant language
HTML
Stars
464
Forks
27
PR merge metrics
No merged PRs in 30d

Description

感谢 @liusong1111 在 https://github.com/hax/hax.github.com/issues/21 话题讨论中提供facebook的这个slide:[React: CSS in JS](https://speakerdeck.com/vjeux/react-css-in-js)。

slide的前半部分,我没想到facebook能在错误的工程化道路上走那么远(这个可以理解为赞美)。我在前文中“局域化CSS”一节写道:“覆写和扩展class钩子或可类比为某种接口使用,但实际运行时并没有任何约束,我们也很难进行静态检查”。但是facebook居然做到了显式接口和静态分析。这完全来自于f家强大的工程能力,体现了f家前端架构师的牛X。不过可惜的是,即使做到这个地步,这条路仍然是走不通的,他们自己最后也意识到了。BTW,这也基本上可以视作对OOCSS、SMACSS、BEM等方法论宣判的死缓。

后半部分是他们的一个解决方法。

包括:
1. 使用inline style
2. 使用JS表达样式组合,从而利用所有JS的特性(如模块化)
3. 放弃使用selector的specificity机制,而是在插入inline style时使用JS的调用顺序来明确override样式的优先级(在这个点上有极高的灵活性,是完胜传统class钩子的关键点)

老实说,我一点也不意外这样的方案,我甚至惊讶于从Bootstrap流行开始花了这么久才走到这一步。实际上我一直认为“样式为中心”的开发方式最终应该回归到inline style上。

但是,这样的方案是不是胜过了我一直推荐的CSS preprocessor的方案?我认为没有。

此slide列出的CSS的scale问题(即大规模开发时的可维护性问题,或者通称“工程化问题”)如下:
1. Global Namespace
2. Dependencies
3. Dead Code Elimination
4. Minification
5. Sharing Constants
6. Non-deterministic Resolution
7. Isolation

(待续...)

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.