我来自于脊梁/ Marionette背景,并且已经工作了几个星期了。很多人说,你应该和脊骨或Ampersand.js这样的东西成对,在经典的MVC模型中使用React作为V和主干/符号作为"M“和"C”。
然而,我越多地思考这个问题,我就越想知道这是否真的有必要。在主干/符号中,模型的主要目的是跟踪状态,并在模型状态更改时“告诉”视图更新。当然,在React中,视图通过视图的props和state来处理这一责任,这似乎使完整的主干/符号模型变得不必要和重复。
我遗漏了什么?
发布于 2015-05-28 23:27:06
首先,让我们用MVC术语定义模型。下面是来自维基百科的文章。
..。模型,捕捉应用程序的行为.独立于用户界面。 该模型直接管理应用程序的数据、逻辑和规则。视图可以是信息的任何输出表示形式。同一信息的多重视图是可能的. 第三部分,控制器接受输入并将其转换为模型或视图的命令。
在React中,您将不可避免地创建View+Controller组件;就像角度、剔除和大多数其他JS应用程序框架一样。
为什么是模特?
虽然您也可以将模型扔到这个级别的组件中,但在实践中却不太好。您有诸如过度获取(和其他优化限制)、困难测试、不分离关注点等问题,在您从精神上将控制器行为与模型行为分离之前,很难看出组件是什么。
所以,脊背?
如果你有这段代码,并且你想让它变得更好,你最终会得到模型。它可以是主干模型,也可以是流量存储,也可以是具有调用$.ajax函数的简单对象。
你使用哪种型号没有什么区别,但你确实需要它们。
为所有的事物建模
哇!在那儿等着。模特可不是免费的。每次使用模型时,您都要跨越抽象边界,离开组件域。在声明式系统中,这是一个命令式操作,因此我们需要确保事情是可预测的。
你的大部分组件都很蠢。道具,也许还有一些UI状态。您有控制器组件(“查看控制器”),它们100%绑定到模型层,其余组件(理想情况下)绑定到模型层。
在最初的问题中,您所描述的是一个小应用程序,其中有一个控制器组件。但是,随着它们的增长,您需要在它们之间进行协调(例如,不要获取同一个用户两次)。您可以将这些控制器嵌套在其他控制器中,以构建应用程序。模型就是胶水。
发布于 2015-05-28 20:09:19
您可以将function组件看作是一个功能上的纯函数,它以道具和状态作为输入参数。它的render()方法的工作是根据道具和状态生成并返回一个(虚拟) DOM元素或JSX (语法糖)。骨干仍然是“拥有”的模式。当主干模型通过用户输入或套接字事件或其他任何东西发生变化时,可以调用setState() (在这里添加一些魔法),这会导致响应组件再次呈现。重点是React组件不保持状态。这并不是说必须使用脊骨和React,因为React只是一个呈现库。
Update:在https://github.com/reactjs/react-future中,呈现()显然应该被视为一个纯函数。它以道具和状态作为输入参数,其工作是生成一个JXS,因此不需要引用this关键字。
https://github.com/reactjs/react-future/blob/master/01%20-%20Core/01%20-%20Classes.js
https://stackoverflow.com/questions/30515933
复制相似问题