2017-02-18 13 views
1

現在、私はそれが間違っているかどうか、私が使用している減速機の例については、より複雑な状態になっていると思います。Reduxネスト状態のデザイン

case RECEIVE_DEPARTMENT_DAYDATA: 
    return { 
     ...state, 
     departments: { 
      ...state.departments, 
      [action.payload.targetDepartment]: { 
       ...state.departments[action.payload.targetDepartment], 
       dayData: { 
        ...state.departments[action.payload.targetDepartment].dayData, 
        [action.payload.day]: { 
         ...state.departments[action.payload.targetDepartment].dayData[action.payload.day], 
         [action.payload.targetField]: { 
          ...action.payload.data, 
          isFetching: false, 
          receivedAt: new Date(), 
          didInvaldiate: false, 
          didCall: true 
         } 
        } 
       } 
      } 
     } 
    }; 

dayDataを自分のレデューサーに移動する方が良いですか、それとも違いはありませんか?

+0

これは私の意見では大きなリファクタを必要とします。合理的な時間内に誰かがこれを読んで理解する方法はありません。あなたが元の状態から膨大な量のプロパティを広げることになったら、データの構造を変更する必要があるかもしれないという良い兆候です。 –

+0

@BalázsÉdesそれは私が考えていたものです。私はそのようなルーキーなので、どんな援助も大歓迎です。基本的に私は 'department'に' dayData'を持っています。この「dayData」にもキーがあります。 – NealVDV

+0

データを「入れ子にしない」ようにする方法はありますか?エンティティを別々のコレクションで扱い、それらをidなどで参照しますか?おそらく、[normalizr](https://www.npmjs.com/package/normalizr)をチェックアウトしてください。 –

答えて

4

私のアドバイスは、あなたの状態を平らな状態に正規化することです。

あなたはに見てみる必要があります:https://github.com/paularmstrong/normalizr そして正規Reduxの状態についてのインテリのダンアブラモフ監督のビデオを参照してください。https://egghead.io/lessons/javascript-redux-normalizing-api-responses-with-normalizr

このインテリレッスンは、私はReduxの状態を管理する方法について学んだ最も重要なものの一つでした私はそれを見てこのことについてもっと読むことを強く勧めます。

最近Twitterが反応し、Reduxのも面白い読み取りかもしれないそれらの状態を解剖記事がありましたし、自分のモバイルウェブサイトをリリースしました:不変のネストされたデータ更新のhttps://medium.com/statuscode/dissecting-twitters-redux-store-d7280b62c6b1#.2e55tu6wb

+0

彼はチュートリアルシリーズを持っていたか分からなかった!ありがとう、これをチェックします! – NealVDV

1

あなたの例が正しいです。しかし、@Canastroも正しいです - これは正規化のための良い候補です。

私はReduxのドキュメントにhttp://redux.js.org/docs/faq/OrganizingState.html#organizing-state-nested-datahttp://redux.js.org/docs/recipes/StructuringReducers.html一読することをお勧めします、だけでなく、私のReact/Redux links listRedux Techniques#Normalizationセクションの記事のいくつかと思います。