私はこのようなタイプを持っています:
declare type Relation = {
_id?: string,
root : string,
oPrimary :string,
nodes : [Ontology]
}
declare type Ontology = {
id : string,
ont : string[]
}
私のレデューサーでは、次のように定義された状態があります。
export interface RelatedBusinessState {
relation : Relation
}
コンポーネントはこのドキュメントのフィールドを更新し、通常はノードを挿入または削除します。データは mongo db に保存され、db への読み取りと書き込みはサービスへの呼び出しを介して @Effect で行われます。
小さな変更があるたびにドキュメント全体を更新するのではなく、@addtoset などを使用します。したがって、@Effect は、セレクターと、変更が必要な特定のフィールドについて十分に認識している必要があります。
レデューサー関数で状態を設定する最良の方法は何ですか? 状態は監視可能であるため、変更はすべてのサブスクライバーに反映されます。オブジェクトにキーを追加すると、たとえば edit : {_id : thisid,...} @Effect 関数で、プロパティ 'edit' がタイプ Relation に存在しないという typescript エラーが発生します。
@Effect はデータを保存し、更新されたドキュメントを取得して、状態を更新する UPDATE_COMPLETE レデューサー関数にディスパッチします。
編集:明確にしようと思います。私の勘違い以外は特に問題ないかもしれません。しかし、ここに行きます。
状態をサブスクライブしています。リデューサーで状態が変更されると、コンポーネントとビューが更新されます。
私のバックエンド データ ストレージでは、コレクション内のドキュメントを更新するために、変更されたデータのみが必要です。
ノードとオントロジーは、コンポーネント内で頻繁かつ迅速に変更されます。単純に何かを追加したり、何かを削除したりします。ビューに変更をすばやく反映させたい。
したがって、コンポーネントでのアクション呼び出しは次のようになります。ここで、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)
私の質問は、 toPayload が返すものは何ですか? レデューサーに設定された更新された状態を返しますか、それともアクションのペイロードを返しますか?