现在认同度较高的 react 最佳实践是这样的:
把 app 拆成一堆 dumb components 。这些 dumb components 只负责把从 props 传递过来的数据显示出来。它们注册例如 click 这样的事件,但是如何响应这些事件也是由 props 传递过来的函数决定。
跟这个 app 相关的所有 state 都保存在最高一级的 component 里。处理 state 的所有逻辑也都在这里。这个 component 只是把所有的子 components 套在一个 div 里。可以看做是只负责逻辑,跟 view 无关。
在上面描述的 pattern 里,最高一级的 component 就是 mv* 里的 model(view model)。 dumb components 只是一堆模板,可以看做 view 。通过 props 传递数据的方式跟传统的变量绑定也没什么不一样。
1
YuJianrong 2015-09-29 14:42:15 +08:00
这个描述很正确,基于这个原因我也觉得 react 并不适用于需要复杂交互的场景(还不如用 MVVM )。
不过阁下说 MV*过时就无法苟同了。 MV*是为了 model 和 view 的分离而出现的,这无论在何时都是重要的 practice ,可能以后 MV*会有一些更新的方法和演化,但我不觉得这个理念会过时掉…… |
2
joyee 2015-09-29 14:43:00 +08:00
比较对象不是一个次元的啊,宣称要搞掉 MV* 的是 flux , react 只是一个 view 层的库……
|
3
ChefIsAwesome OP @YuJianrong react / flux 他们说 mv* 过时。
@joyee flux 就是个大的 react component 。 react 自己的文档里,谈到 prop 和 state 如何使用时就说,尽量写 stateless 的 components ,这已经涉及到设计模式层面了。 |
4
joyee 2015-09-29 14:56:34 +08:00
@ChefIsAwesome 然而 flux 和 react 之间没有必然的依赖关系…… flux 可以搭配别的 view library , react 也可以搭配别的 MV* framework ……
|
5
otakustay 2015-09-29 16:47:46 +08:00
首先, react 是 View 层解决方案,不应和 MV*做比较
flux 在不与 react 一起玩的时候,是可以和 MV*做比较的,本身是一个 application 级的模式 我认同 flux 和过时 MV*并没有区别,顶多是过时的 MV*很多人没玩好,所以 flux 来重新定义一下各个细节,给予更大的限制不让你犯错 |