Я использую 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)
, так что мне трудно понять, почему и когда передавать номер/строку?