2016-02-05 74 views
0

在我的應用程序中,狀態樹有這樣的形狀:正確鏈接減速時使用結合他們可能不適合

{ 
    ...otherReducers, 
    rooms: Map({ 
     // room being the room's id 
     room: Map({ 
      id: '', 
      name: '', 
      users: Map({ 
       // user being the user's id 
       user: Map({ 
        id: '', 
        name: '', 
        rank: ' ' 
       }) 
      }) 
     }) 
    }) 
} 

爲了更新用戶的狀態,我一直在寫我的減速器如下:

function roomsReducer(state = Map(), action) { 
    case USER_RENAME: 
     return selectRoom(state, action); 
    default: 
     return state; 
} 

function selectRoom(state, action) { 
    let room = state.get(action.payload.id); 
    return state.set(action.payload.id, roomReducer(room, action)); 
} 

// and so on and so forth until I reach the user I want to update 

有沒有辦法我一個與room,結合users減速,儘管它有idname屬性?如果沒有,是否有更好的方法可以管理我的狀態,使減少更易於管理?

回答

1

這是如何構造你的狀態的問題。編輯用戶會更容易,如果它被規範化如此:

{ 
    ...otherReducers, 
    rooms: Map({ 
    5: Map({ 
     id: '5', 
     name: 'some name', 
     users: [1,4,52] 
    }) 
    }), 
    users: Map({ 
    1: Map({ 
     id: '1', 
     name: 'Charles', 
     range: 'Master' 
    }), 
    4: Map({ 
     id: '4', 
     name: 'Sally', 
     range: 'Master' 
    }), 
    52: Map({ 
     id: '52', 
     name: 'Harry', 
     range: 'Novice' 
    }) 
    }) 
}