Angular “如何”;哑巴;哑组件应该是什么?
我正在用智能/转储组件构建我的Redux(NgRx)应用程序,但我正在努力决定这些哑组件应该有多“哑” 例如,我有一个智能组件(Angular “如何”;哑巴;哑组件应该是什么?,angular,redux,ngrx,Angular,Redux,Ngrx,我正在用智能/转储组件构建我的Redux(NgRx)应用程序,但我正在努力决定这些哑组件应该有多“哑” 例如,我有一个智能组件(posts),它有一个哑组件(post list),其中包含哑组件(post)。直到这里一切看起来都很好 要显示一些按钮,我需要知道用户是否为admin,我需要将属性admin从posts一直传递到post 我可以将哑组件post连接到存储并直接从哑组件获取它吗。或者,这种情况下的组件是否不再愚蠢? 它看起来像这样: private admin$: Observab
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状态而不是数据)
- 作为功能组件编写,除非它们需要状态、生命周期挂钩或性能优化
- 示例:页面、边栏、故事、用户信息、列表