1

長いテキストで申し訳ありません...初期状態を計算するために互いに待機する必要があるいくつかのアクションをチェーンする最良の方法を見つけようとしています。おそらく再選択が役立つでしょうが、それをどのように適合させるかを理解するのに苦労しています.ImmutableJSを使用していますが、標準のJSONを使用して問題を説明します. 初期状態は次のようになります。

{
"book": {
"id": 1,
"title": "THE book",
"notes": [
  1,
  2,
  4
]
 },
 "detailedNotes": [
{
  "id": 1,
  "text": "Just a note",
  "categories": [
    "Vital"
  ]
},
{
  "id": 2,
  "text": "Testing",
  "categories": [
    "Vital"
  ]
},
{
  "id": 4,
  "text": "Doodling",
  "categories": [
    "Relevant"
  ]
}
],
"notesByCategory": [
{
  "Vital": [
    1,
    2
   ]
 },
 {
  "Relevant": [
    4
  ]
 }
 ],
 "activeCategory": "Vital"
}

bookdetailedNotesは GET 呼び出し (フェッチを使用) からのものです。notesByCategoryは私のコードによって計算されます (現時点ではレデューサーで...)。 また、activeCategoryの初期値を最初に計算されたカテゴリ (例ではVital ) として設定する必要があります。actions.js と reducer.js に関連するコードは次のとおりです。

        //in actions
    export function fetchBook(id) {
        return function (dispatch) {
            return fetch('/api/book/' + id)
                .then(json => {
                        dispatch(receiveBook(json));
                        dispatch(fetchDetailedNotes(json['notes']));
                    }
                );
        }
    }
    export function fetchDetailedNotes(ids) {
        return function (dispatch) {
            return fetch('/api/notes/?ids=' + ids.join())
                .then(json => dispatch(receiveDetailedNotes(json)))
        }
    }
    export function receiveDetailedNotes(detailedNotes) {
        return {
            type: RECEIVE_DETAILED_Notes,
            detailedNotes
        }
    }

    //in reducer
    function detailedNotesReducer(state = List(), action) {
        switch (action.type) {
            case actions.RECEIVE_DETAILED_NOTES:
                return fromJS(action.detailedNotes);
            default:
                return state
        }
    }
    function notesByCategory(state = List(), action) {
        switch (action.type) {
            case actions.RECEIVE_DETAILED_NOTES:
                return extractNotesByCategory(state, action.detailedNotes);
            default:
                return state
        }
    }

レデューサー構成もありますが、割愛しました。ここで、最初のactiveCategoryを最初のカテゴリに設定したいのですが、問題があります。これをどこに置くべきかわかりません。状態のnotesByCategory部分が計算されるまで、最初に待機する必要があります。この計算はレデューサーに入れるべきではないと思います。助言がありますか?

4

2 に答える 2

0

通常、デフォルトの状態はレデューサーによって処理される必要があります。最初に、レデューサーで null 状態を取得し、「初期」状態を提供する必要があります。

これは、多くの場合、デフォルト パラメーター ( =List()) の便利な構文を介して使用されます。

于 2016-05-10T10:13:41.697 に答える