最近、ngrxとreduxパターンを見ていて、既存のAngular2アプリをngrx/storeを使って書き直す方法を考えています。 私が持っているのは、ユーザーが閲覧でき、(サインインしていれば)引用を好きで公開できるアプリです。 典型的な引用オブジェクトは、次のようになります。Angular2 ngrxのTwitterのようなアプリ。構造体AppState
{ text: "Success is the ability to go from one failure to another with no loss of enthusiasm.", publisher: user12345, rank: 14, //some more data }
アプリケーションstrucureは、次のようになります。
- ホームページ - のいずれかの登録/ログインフォームまたはランダム引用して(ログインした場合)。
- ユーザーと新しいものを公開する形で発行されたすべての引用とタブ
- タブとプロファイルページ。
- プロフィール情報
- 引用は、上記と同様の構造を持つ他のユーザーのプロフィールを表示するページに
- ページを養います。 (ユーザーが引用の発行者をクリックしたとき)。
だから、私はAppStateツリーがどのように見えるかについてかなり不満を抱いています。
AppState {
UserState {
UserCitationsState,
UserInfoState,
AuthState
},
RouterState,
UserPageState //State representing the other user's page viewed
//etc
}
主な質問は、すべてのデータがバックエンドREST APIからリクエストごとに取得されるため、各状態にどのようなデータを格納すればよいでしょうか。それは例えばのような単なるブール値:
UserPageState {
loading: false,
loaded: true
}
か、それはまた、すべての情報を格納し、ちょうどそれを新しいユーザーページが要求されるたびに交換する必要があるだろうか?ユーザーが他のユーザーのページに移動するたびに、すべてのデータがバックエンドからフェッチされます。 それは私の基本的な混乱のポイントです - 還元型でこれらの種類のアプリをどう扱うか。
EDIT は、私は、全体的なアプリを表現するために5つの状態(5つの減速)で自分自身を制限瞬間:
- AuthState
- UserState
- UserListState
- CitationState
- CitationListState
しかし、全体のアプリ状態では、私はそれらの多くを複製しています。私はそれがうまくいくと思います。それとももっと良い方法がありますか?
export interface AppState
{
localUser: AuthState
//homePage
homeCitation: CitationState
//profilePage
profileInfo: UserState
profileCitations: CitationListState
favouriteCitations: CitationListState
subscribers: UserListState
//userPage (when local user navigates to citation publisher's profile)
userInfo: UserState
userCitations: CitationListState
userSubscribers: UserListState
//feedPage
feed: CitationListState
//.....
}
。あなたより) –
私が作った編集を見ていただけますか?あなたはそのような構造について何を薄くしていますか?私がアプリの状態をページごとにしか想像することができない瞬間です –
これらの状態の内容によって異なります。たとえば、homeCitation(ホームページ)にはどのようなデータが含まれていますか? 私には、データを少し一般化しようとするように思えます。考えているのではなく、このページにこのデータが必要であり、それをページ縮小機能に配置する必要があります。 * *を除いて、あなたが保存したい特定のプロパティを持っていれば、私は減速者をページにしません。 – cgatian