在example的SRC(UserPage.js):在終極版真實世界的例子關於規範
const mapStateToProps = (state, ownProps) => {
// We need to lower case the login due to the way GitHub's API behaves.
// Have a look at ../middleware/api.js for more details.
const login = ownProps.params.login.toLowerCase()
const {
pagination: { starredByUser },
entities: { users, repos }
} = state
const starredPagination = starredByUser[login] || { ids: [] }
const starredRepos = starredPagination.ids.map(id => repos[id])
const starredRepoOwners = starredRepos.map(repo => users[repo.owner])
return {
login,
starredRepos,
starredRepoOwners,
starredPagination,
user: users[login]
}
}
我注意到,有許多模板像xxx.ids.map(id => someEntities[id])
,我不知道爲什麼使用這種模式工作.IMO,我會在容器組件中使用類似import { map } from 'lodash'; someList && map(someList, item => {...})
的東西,並只傳遞mapStateToProps
中的實體。
那麼,有人可以解釋它的目的嗎?謝謝。
不太確定我明白這個問題。你是在問一個關於在ID上映射以獲取項目列表的想法,或者使用'Array.map()'而不是'_.map()'? – markerikson
謝謝reply.I的意思是沒有必要「映射到ID來獲取項目列表」,我們可以做一些像'lodash'中的import {map}; someList && map(someList,item => {...})也可以很好地工作。我們使用'lodash.map'而不是'Array.prototype.map'是因爲我們的數據是由'normalizr'庫規範化的,所以這些項目是一個不是數組的對象。 @markerikson –
這個例子中我反對的原因是(例如,'xxx.ids.map(id => someEntities [id])'),這個步驟之後的結果數據在這個步驟完成之前已經存在。如上所述,我們只需將mapStateToProps中的實體(來自normalizr庫中的規範化數據)傳遞給我們的容器組件@markerikson –