其实纠结这个问题,也是因为没基础。比如我也就是AngularJS做过几个项目,React刚刚入门,这个阶段别说造轮子,就连造好的轮子是圆的是方的都看不出来。
现在在生产环境中使用Redux合适吗?
建议先了解Flux想要解决的问题和解决方案的思路,然后对比一下自己之前程序的解决方法和Flux对比一下,可能会更好的判断是不是该用Flux或者是不是该用现成的Flux实现。
如果不理解Flux每个部分的职责和局限的话,光是引入别人的Flux库可能也不会有很多优点。就像MVC框架一样,光是引入MVC然后把类分成M、V和C并不能保证写出来清晰的MVC程序。
如果自己实现也不必说是重复造轮子,因为困难的部分都在React,看一下官方的Flux就会发现Flux部分的代码超短的,自己写搞不好还有利于理解架构。
redux 1.0.0-rc
已经可以通过npm安装了. 对应的是breaking-changes-1.0
这个branch, 基本上应该和要发布的1.0.0版本的API一致了.
我看上redux的原因特别搞笑,因为本来就没经验,只是对flux有个大概结构上的了解,所以完全说不上判断框架的好坏。不过看了redux提供的两个sample,觉得项目结构真是又简单又实用,按照自己的要求,改改webpack.config.js也不是麻烦事情,比起react-starter-kit这些成熟的项目维护起来要省心很多。所以立刻心理就觉得这个东西靠谱。另外一个因素也很搞笑,最近非常迷信ES6,看来看去,好像还是redux这样新框架,更符合ES6的规范。
不过也还是有小小的阴影,react-redux的issue3看着就莫名奇妙的,希望真的只是dom结构回收比较慢吧。
Redux 从 Dan 写了那篇 blog 开始,我就一直跟了很久,越来越没有想用的欲望。
-
函数式编程:Dan 自己也在 twitter 上说,Redux 对于 FP-guys,和 Non-FP-guys,都难于理解。现在 FP 挺火,github 上本月最火的 repo 就是 FP 的教程。但是,毕竟是一种相对未成主流的编程范式。
-
ES7的语法:这是令我望而却步的原因。我虽然是从 Java 过来的,更久之前也写过 C#,对 ES6 引入的 Class 并不畏惧。但依然坚持用 ES5 的 function 来写。原因就是1,FP。我目前是准备学习 FP 的。竟然还引入了 ES7 的 decorator 语法。这个 Dan 也在 twitter 上说,他本人是不喜欢 Class 的,是用 Class 是因为提供了清晰的代码结构。React.createClass 是 JavaScript 的(伪)类的实现,但翻看源码发现其实做了几件事(autobind,props, state,inject mixins),本质还是返回一个 function。参看 Elliott 的这篇 blog。当然他现在写了一个 stampit 的库,这个对于社区更加陌生了。
-
Redux 引入很多的 concepts。这一点和原生 flux 相比有好有坏。原生 Flux 是一个 pub/sub。和一般的 pub/sub 相比,主要区别在于:
- 回调并不会订阅特定的事件。每一个 payload 都会分派给所有注册的回调。
- 回调会被整个或者部分延迟,以等待其他回调执行完毕。
而,Redux 目前引入了一个 middleware 的概念。这个是 fluxmmox 的作者 acdlite 加入后,引入的概念。我当时觉得 Redux 自此已经偏离他那篇初始博客的本意了。code base 越来越复杂。这一点 Facebook 就做的很好,不引入复杂的概念,使用 ubiquitous 的概念。
同意 @pinyin 的,可以自己实现一个。不过,flux 本身是一个 data flow 的概念,官方Flux 本身就是一个 pub/sub, 不能称为实现,我现在倾向于称为是做减少 boilerplate 的工作。
最新版是没有什么问题的,redux比较适合大的项目,因为要整体去架构一个整体布局需要点时间的,比如action里面你要做哪些基本的操作,这个是要进行规划才能进行的任务,如果是一个简单的玩玩的话,就算了。我之前也用过reflux,是简单,易理解,但问题是,如果使用es6的语法写react的话就会有问题,不能使用mixin啦,如果用的话,就是es6里面加入了不是es6的语法,就有点混了,不是很纯净,redux跟react结合比较还是比较适合的,推荐,哈哈
很合适,我们公司就在生产环境中使用。自己有个学习型项目,前端是用的React + Redux,在此访问:http://www.hieat.me/sign (后端用的Play 2,不感兴趣的同学请忽略)
上周刚把项目从官方的 flux + immutable 转成 redux + immutable 用 jscodeshift 做了大量的代码批量修改,挺顺利。
redux 和 flux 代码量都不是太大,合适不合适使用,主要而在于自己或团队对 flux / redux 它们提供的解决方案,思路是否理解到位。