V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ChefIsAwesome
V2EX  ›  React

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

  •  
  •   ChefIsAwesome · 2015-09-29 14:36:33 +08:00 · 2957 次点击
    这是一个创建于 3103 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在认同度较高的 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 条附言  ·  2015-09-29 17:09:21 +08:00
    大家都说 react 属于 view 层,应该拿 flux 去跟 mv* 比较。但是只要你是写 react ,只要你的 react 不止一个子 component 。那你就必须按照某种 pattern 来写。而我想说的就是现在推崇的 smart component + dumb component 的 pattern 跟 mv* 没什么不一样。
    如果大家尝试过各类 flux 实现,特别是 redux ,就应该能感受到 flux 就只是最上面的那级 smart component 而已。

    最早的 react 提倡 component 的 self encapsulated ,于是他们把模板和逻辑用 jsx 的方式写在一起。接下来 flux 出现,各类最佳实践又提倡应该把逻辑统一到一个地方处理, components 只做渲染数据。大家不觉得 react 实际上是在走回头路么。
    5 条回复    2015-09-29 16:47:46 +08:00
    YuJianrong
        1
    YuJianrong  
       2015-09-29 14:42:15 +08:00
    这个描述很正确,基于这个原因我也觉得 react 并不适用于需要复杂交互的场景(还不如用 MVVM )。
    不过阁下说 MV*过时就无法苟同了。 MV*是为了 model 和 view 的分离而出现的,这无论在何时都是重要的 practice ,可能以后 MV*会有一些更新的方法和演化,但我不觉得这个理念会过时掉……
    joyee
        2
    joyee  
       2015-09-29 14:43:00 +08:00
    比较对象不是一个次元的啊,宣称要搞掉 MV* 的是 flux , react 只是一个 view 层的库……
    ChefIsAwesome
        3
    ChefIsAwesome  
    OP
       2015-09-29 14:48:37 +08:00
    @YuJianrong react / flux 他们说 mv* 过时。

    @joyee flux 就是个大的 react component 。 react 自己的文档里,谈到 prop 和 state 如何使用时就说,尽量写 stateless 的 components ,这已经涉及到设计模式层面了。
    joyee
        4
    joyee  
       2015-09-29 14:56:34 +08:00
    @ChefIsAwesome 然而 flux 和 react 之间没有必然的依赖关系…… flux 可以搭配别的 view library , react 也可以搭配别的 MV* framework ……
    otakustay
        5
    otakustay  
       2015-09-29 16:47:46 +08:00
    首先, react 是 View 层解决方案,不应和 MV*做比较
    flux 在不与 react 一起玩的时候,是可以和 MV*做比较的,本身是一个 application 级的模式
    我认同 flux 和过时 MV*并没有区别,顶多是过时的 MV*很多人没玩好,所以 flux 来重新定义一下各个细节,给予更大的限制不让你犯错
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2415 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:07 · PVG 00:07 · LAX 09:07 · JFK 12:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.