私が読んだパターンから、コンポーネントはストアにサブスクライブするコンポーネントの値の変更をトリガーするストアに渡すアクションにデータを渡します。私の質問は、これらのトリガーされた更新に通知の形で「反応」する方法ですか? (つまり、正常に保存された通知)
つまり、サブスクライブしているオブジェクトに何らかのフラグ属性がある場合にのみ表示されるこの通知コンポーネントのレンダリングにロジックを追加する必要がありますか? その後、しばらくすると自分自身を削除します。これは間違っているように聞こえます。
アップデート
Hannes Johansson のおかげで、パターンをよりよく把握できたと思います。私が取り組んでいるのは次のとおりです。
コンポーネントは、アクションを介してストアにデータを渡します
Store は API と対話し、更新されたモデルがコンポーネントに通知されるようになったことを示すフラグをモデルに追加します。
createItem: function (item) { $.ajax({ url: '/items', method: 'POST', data: item, success: function (item) { CurrentBrandActions.addCampaign(item); this.item = item; item.newlyCreated = true; this.trigger(item); }.bind(this) }) }
コンポーネントはフラグを見て、「通知子コンポーネント」をレンダリングします
var newlyCreated = this.state.item.newlyCreated === true; if (newlyCreated) { newlyCreated = <ItemCreatedNotification item={this.state.item} /> } else { newlyCreated = ''; } return ( <form onSubmit={this.createItem} className="form"> {newlyCreated}
このイベントに基づいて、アプリを新しい場所に移動する必要があります。これは、a) 通知の子コンポーネント、b) 親コンポーネント、c) ストアである必要がありますか?
フラックス API パターンに関するColin Megill の話によると、API の相互作用はアクションで発生するはずですが、逆流は実際にはそれを許可しません。
更新 2
コンポーネントは、呼び出されたアクションにデータを渡します
createItemRequest
Action には、実際に API 呼び出しを行う preEmit フックがあります。は
createItemRequest
ストアに続き、ストアは送信の状態を反映するようにモデルを変更できます。これは、コンポーネントに表示されます (おそらくスピナーを表示します)。このアクションは、API の結果に応じて、他の 2 つのイベントを発生させる役割も果たします。ItemActions.createItemRequest.preEmit = function (data) { $.ajax({ url: '/items', method: 'POST', data: data, success: function (item) { ItemActions.itemCreatedSuccess(item); }, error: function (error) { ItemActions.itemCreatedError(error); } }); }