符合最佳实践的 react app 和 “过时的”mv* 没什么不一样

2015-09-29 14:36:33 +08:00
 ChefIsAwesome

现在认同度较高的 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 传递数据的方式跟传统的变量绑定也没什么不一样。

3095 次点击
所在节点    React
5 条回复
YuJianrong
2015-09-29 14:42:15 +08:00
这个描述很正确,基于这个原因我也觉得 react 并不适用于需要复杂交互的场景(还不如用 MVVM )。
不过阁下说 MV*过时就无法苟同了。 MV*是为了 model 和 view 的分离而出现的,这无论在何时都是重要的 practice ,可能以后 MV*会有一些更新的方法和演化,但我不觉得这个理念会过时掉……
joyee
2015-09-29 14:43:00 +08:00
比较对象不是一个次元的啊,宣称要搞掉 MV* 的是 flux , react 只是一个 view 层的库……
ChefIsAwesome
2015-09-29 14:48:37 +08:00
@YuJianrong react / flux 他们说 mv* 过时。

@joyee flux 就是个大的 react component 。 react 自己的文档里,谈到 prop 和 state 如何使用时就说,尽量写 stateless 的 components ,这已经涉及到设计模式层面了。
joyee
2015-09-29 14:56:34 +08:00
@ChefIsAwesome 然而 flux 和 react 之间没有必然的依赖关系…… flux 可以搭配别的 view library , react 也可以搭配别的 MV* framework ……
otakustay
2015-09-29 16:47:46 +08:00
首先, react 是 View 层解决方案,不应和 MV*做比较
flux 在不与 react 一起玩的时候,是可以和 MV*做比较的,本身是一个 application 级的模式
我认同 flux 和过时 MV*并没有区别,顶多是过时的 MV*很多人没玩好,所以 flux 来重新定义一下各个细节,给予更大的限制不让你犯错

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/224516

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX