2016-12-23 2 views
2

Я использую immutable.js и redux в проекте, и я нашел довольно странную проблему.immutable.js confused при использовании метода get()

здесь код используется в селекторе:

{ 
    dealDetail : dealDetails.get(id.toString()).toJS(), 
    dealTrackLog : dealTrackLogs.get(id).toJS() 
} 

Во-первых, id это номер, в деталях, я должен передать строку идентификатора, и в Tracklogs, наоборот, он должен быть номер, в противном случае вызовет ошибку, «не может прочитать свойство toJS() неопределенных»

, и я думаю, что проблема может быть в редукторе, вот код:

// dealDetailReducer 
// const initialStateOfDealDetail = fromJS({}) 
let details = {} 
action.data.details.map((detail) => { 
    details[detail.id] = detail 
}) 
return state.merge(fromJS(details)) 

... 

// dealTrackLogsReducer 
// initialStateOfDealTrackLogs = fromJS({}) 
if (state.get(action.data.id)) { 
    // has id in state, update 
    return state.withMutations(s => 
    s.update(
     action.data.id, 
     trackLog => trackLog.merge(fromJS(action.data.trackLogs)) 
    ) 
    ) 
} 
// no id in state, just set, id : data 
return state.set(action.data.id, fromJS(action.data) 

, так что мне трудно понять, почему и когда передавать номер/строку?

ответ

0

Первая линия

let details = {} 

Вы используете обычный объект для деталей состояния. Объекты принуждают к строковым клавишам. Во втором случае вы используете операцию immutablejs, которая сохраняет тип ключа.

Смежные вопросы