Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular “如何”;哑巴;哑组件应该是什么?_Angular_Redux_Ngrx - Fatal编程技术网

Angular “如何”;哑巴;哑组件应该是什么?

Angular “如何”;哑巴;哑组件应该是什么?,angular,redux,ngrx,Angular,Redux,Ngrx,我正在用智能/转储组件构建我的Redux(NgRx)应用程序,但我正在努力决定这些哑组件应该有多“哑” 例如,我有一个智能组件(posts),它有一个哑组件(post list),其中包含哑组件(post)。直到这里一切看起来都很好 要显示一些按钮,我需要知道用户是否为admin,我需要将属性admin从posts一直传递到post 我可以将哑组件post连接到存储并直接从哑组件获取它吗。或者,这种情况下的组件是否不再愚蠢? 它看起来像这样: private admin$: Observab

我正在用智能/转储组件构建我的Redux(NgRx)应用程序,但我正在努力决定这些哑组件应该有多“哑”

例如,我有一个智能组件(
posts
),它有一个哑组件(
post list
),其中包含哑组件(
post
)。直到这里一切看起来都很好

要显示一些按钮,我需要知道用户是否为
admin
,我需要将属性
admin
posts
一直传递到
post

我可以将哑组件
post
连接到存储并直接从哑组件获取它吗。或者,这种情况下的组件是否不再愚蠢? 它看起来像这样:

  private admin$: Observable<boolean>;
  constructor(private store: Store<AppState>){
    this.admin$ = this.store.let(isAdmin());
  }
private admin$:可观察;
构造函数(私有存储:存储){
this.admin$=this.store.let(isAdmin());
}

我认为这将节省大量冗余。这是好的还是坏的做法?

这个问题适用于任何客户端框架,包括React/Flux以及遗留Angular 1.x应用程序(通常通过类似的方式),答案是这取决于您的用例

不过你问了两个问题。哑组件应该是多哑的,以及如何最好地确定一个组件是否应该是哑的

问题1:如何最好地确定一个组件首先是否应该是哑的:

在您的具体案例中,我会问这样一个问题:Post列表或Post组件是否会在Post之外使用?因此,将最高“级别”设置为智能组件(也称为容器)。例如,如果Post只在Post列表内部使用,而Post列表可能在Post列表外部使用,那么Post列表应该是智能组件,允许您更轻松地将其“放入”其他组件中

不过,这说明了一种通用方法。询问哑组件是否可能存在于其智能组件之上或作为其同级,如果存在,则对其进行升级,如果不存在,则将其保留为哑组件

问题2:哑组件应如何“哑”:

哑组件需要传递任何更改的内容,并且作为最佳实践,需要传递方法来调用基于用户操作可能发生的任何事件


例如:如果文本、图像或媒体基于应用程序状态的更改,则应将此数据传递给组件。如果存在按钮、链接、表单或其他可单击元素,则传递至少可选的回调/方法来调用这些元素将为组件的用户(即使是您)提供未来的灵活性,以满足应用程序需求的增长。

我认为“dumb”可以在不同的上下文中重用

Dumb只对它的父母感兴趣

我用angular 2对自己重复的咒语。如果事情变得复杂和混乱,请重新考虑我的策略


那么另一个层次的组件呢。管理模式是一个子模式,非管理模式是另一个子模式。这些子组件可以通过输入获取数据,并通过输出发出数据

哑组件应该是没有任何逻辑的表示组件

根据丹·阿布拉莫夫(Dan Abramov)Redux的作者,哑组件符合以下标准:

  • 他们关心事物的外观
  • 内部可能包含表示组件和容器组件**,并且通常有一些自己的DOM标记和样式
  • 通常允许通过此.props.children进行遏制
  • 对应用程序的其他部分没有依赖关系,例如Flux操作或商店
  • 不要指定如何加载或修改数据
  • 仅通过props接收数据和回调
  • 很少有自己的状态(如果有,则是UI状态而不是数据)
  • 作为功能组件编写,除非它们需要状态、生命周期挂钩或性能优化
  • 示例:页面、边栏、故事、用户信息、列表
角度的

它们应该只显示信息并通过输入和输出流处理事件

因此,我建议在smart and dumb上查看ngrx示例应用程序:

你也可以看到我是如何在游戏中实现智能和哑的。

注意:容器组件也是可重用的。组件是表示组件还是容器组件是一个实现细节

表示组件通过@Input()接收数据,并通过@Output()传递事件,但通常不保持其自身的内部状态。在数据更新返回之前,所有决策都委托给“容器”或“智能”组件

希望这会有帮助