在ngrx reducer

时间:2016-09-02 01:13:09

标签: typescript ngrx

我有这样的类型:

declare type Relation = {
_id?: string,
root : string,
oPrimary :string,
nodes : [Ontology]

}

declare type Ontology = {
    id : string,
    ont : string[]
}

在我的reducer中,我有一个像这样定义的状态:

export interface RelatedBusinessState {
relation : Relation

}

我的组件更新了本文档中的字段,通常是插入或删除节点。数据存储在mongo db中,并且通过调用服务在@Effect中读取和写入db。

我不希望每次更改时都更新整个文档,但@addtoset或类似的更新。所以@Effect需要足够了解选择器,以及需要更改的特定字段。

在reducer函数中设置状态的最佳方法是什么?该状态是可观察的,因此任何更改都将反映在任何订户中。如果我在对象中添加一个键,比如编辑:{_ id:thisid,...}我在@Effect函数中得到了属性'编辑'在类型Relation上不存在。

@Effect保存数据并获取更新的文档,将其分派给更新状态的UPDATE_COMPLETE reducer函数。

编辑:我会尝试澄清。除了我的误解之外,可能根本没有问题。但是这里有。

我订阅了状态,组件和视图将在reducer中更改状态时更新。

我的后端数据存储仅需要更改的数据来更新集合中的文档。

节点和本体将在组件中频繁且快速地更改;只是添加东西或删除一些东西。我希望视图能够快速反映变化。

因此组件中的动作调用看起来像这样,其中addNode是一个调度动作的函数。

addNode({ id : token, ont : ['Customer']});

动作创建者看起来像这样:

static ADD_NODE = '[Relations] Add Node';
addNode(node : Ontology) : Action {
return {
type : RelatedBusinessAction.ADD_NODE,    
payload : node
}
}

@Effects是数据库调用的地方。

@Effect nodeadd$ = this.updates$
.whenAction(RelatedBusinessActions.ADD_NODE
.map<Relation>(toPayload)

我的问题是付费返回是什么?它是否返回reducer中设置的更新状态,还是返回操作的有效负载?

1 个答案:

答案 0 :(得分:0)

  

我的问题是付费返回是什么?它是否返回reducer中设置的更新状态,还是返回操作的有效负载?

它只是返回action.payload。

export function toPayload(action: Action) { return action.payload; }

toPayload Method