【问题标题】:Display logic, in the controller or the component?在控制器或组件中显示逻辑?
【发布时间】:2016-05-21 23:18:24
【问题描述】:

假设我有一个HomeControllerMenu(组件)。

我知道所有的道具都应该自上而下并且是不可变的。但是,假设我需要菜单来显示特定菜单的所有链接,该过滤逻辑应该放在菜单中还是控制器中?

基本上是这段代码: var items = menus.filter((item) => { item.name === 'main'; });

【问题讨论】:

    标签: reactjs reactjs-flux


    【解决方案1】:

    如果没有进一步的上下文,很难说出正确的方法是什么:

    A. Menu(控制器)内的逻辑 如果你有一个完整的 menu-wrapper 组件(可以称为“menu-controller”),它可以在内部确定要显示哪个菜单以及在哪个结构中显示,那么 filter 语句可以在菜单组件内部。

    所有相关信息都应作为道具传递给菜单组件。

    您的声明(在菜单组件内)将如下所示:

    var items = this.props.menus.filter((item) => { item.name === this.props.pagename; });
    

    这将是避免臃肿的主控制器,并在每个页面上获得可维护和可重用菜单的好方法。

    B. HomeController 内部的逻辑 如果您的菜单行为是

    • 非常特定于主页,菜单不能在页面间重复使用
    • 取决于各种其他 Home 参数

    那么最好坚持 MVC 原则,即逻辑应该在控制器内部,并尽可能保持组件的纯净(和愚蠢)。 在这种情况下:

    • 让 HomeController 选择要显示的正确菜单项,并构建菜单结构。
    • 将配置的菜单 (items) 传递给菜单组件
    • 菜单组件只是呈现它接收到的项目(没有过滤器)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      • 2011-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-15
      • 2018-07-07
      相关资源
      最近更新 更多