说一下我对 React 整体的印象, 还有想一下对前端社区是有什么样的影响…
为什么我要关注 React
花这么多时间在 React 上边, 最开始是因为更新 DOM 的结果和我从前的期待很像:
当时我接触到 Angular 双向绑定, 就对照着公司用的 Handlebars 在思考模板引擎的问题
我发现模板引擎的 DOM 更新非常琐碎, 因此开始关注 MVVM 声称的自动更新的高效率,
除了 MVVM, Ractive.js 模块也做到, 而到了 React, 这个观念更加明确了.
从 Facebook 发布了 Flux 架构, 我就一直关注 React.
另一件事情是在国外社区 React 突然非常热门, 几个星期出现了好几个高质量的演讲
尤其是关于"单向数据流"架构的思考, 对我来说简直是醍醐灌顶,
在 Flux 架构当中, 非常明确要避免事件在各种 View 和 Model 交错的问题,
这些交错关系被理清之后, 编写应用就和后端写页面一样流程明确了.
所以我相信 React 以后会成为跟 Web Components 那样意义重大的技术.
而且国外社区已经证明了 React 非常棒, 相信很快会在国内火起来.
我觉得自己应该是前端开发者当中不多的非常关心函数式编程的人…
React 跟函数式响应式编程(Functional Reactive Programming) 有着千丝万缕的联系,
也许借着这个机会, 会有非常多函数式编程的思想能在 Web 开发当中转变为应用.
不过, 这些出风头的事情都是国外开发者在做… 真希望国内也有那样的水平
总之抱着这之类感想, 我非常希望 React 能在国内传播开来, 并且解决我开发当中遇到的问题.
现在有论坛了, 前面 @fraser 也举办过 meetup 了, 希望后面中文文档也能完成, 多带来点帮助
对比 jQuery 的意义
虽然 React 常常跟 Backbone, Angular 对比, 可实际上跟 jQuery 和 Web Components 对比更合适,
因为 React 没有完整处理 MVC 应用整体的架构, 而是仅仅是界面渲染的模块,
这个模块可以和 Backbone, Angular 搭配使用, 作为新的操作 DOM 的工具, 以代替 jQuery,
React 的功能, 一是维护 DOM 的更新和模块化, 二是封装了 DOM 的事件系统,
这两点也是人们使用 jQuery 重要原因. React 出现在双向绑定之后, 提供了更好的方案.
React 认为状态是特别容易出现很多 bug 的原因, 因为人们并不善于管理大量状态,
在 jQuery 当中, DOM 操作都是和 DOM 的状态有关的, 有时候其行为非常难预测.
相比之下 React 中提倡属性不变, 很好地避免了 jQuery 当中遇到的问题.
在 React 当中, DOM 的状态更新完全算法来完成, 开发者专注于数据部分,
当数据不变时 只有一种对应的界面, 因而程序有着更好的可预测性,
我个人觉得以后 React 可能像是现在大家用 jQuery 那样, 觉得理所当然.
而且编写应用时相比 jQuery, React 应用可以省却更多的代码, 效率也就更高.
至于能否完全替代 jQuery, 至少我在操作 DOM 当中进行替换已经能做到了.
关于 MVC
完整思考 MVC 在发布 Flux 时候才深入讲的, 不过目前没有官方的完整框架.
当时有很多评论说 Flux 其实和 MVC 没有差别, 虽然官方一直在努力把两者区分开来.
我认为 Flux 和前端 MV* 最重要的区别在于 Model 跟 View 的数量和其中的关系:
到了 Flux 当中, 除了名字改变了, 重要的是大量的 Model 归到了 Store, View 也统一了,
从而得到了所谓单向的数据流, 就是 Model 和 View 之间关系非常清晰了…
这样需要人为管理的状态就一下少了很多, 结果体现在开发应用的效率当中:
不过, 实际和已有的 MV* 框架对比的话, 我倾向认为 Flux 不是那么神的东西.
首先, Flux 框架的社区实现很多, 并没有哪一个一定说带来极高的开发效率,
真正带来开发效率区别的是自动更新 DOM, 而 Angular, Emberjs 在这方面也做非常棒.
这一方面来说, React 只是把自动更新 DOM 的门槛和成本降到了非常低而已
而在 Angular 和 Ember 中对界面 MVC 有很多经验, 这是 React 现在做不到的.
其他
对我来说, Angular 框架内容太多, 降低了和其他模块搭配使用的可能,
但是 React 作为模块, 其设计非常便于和其他的方案搭配使用, 甚至尝试新的方案编写应用,
当有这样的可能, 也许社区会出现更好的 Store 实现, 未来好的可能性会有很多…
目前我是这样看 React 的, 不代表以后不会有大的转变,
也有可能视角不够全面也不够深入, 这样要等其他同学挖更多的用法出来才行.
继续关注, 继续尝试用 React 做不同的东西…