这是我的reducer的初始状态,我需要以这种方式设置它,因为我需要做一些后期处理:
const initialState = {
showAll: {
photos: null
}
}
基本上,我有一个页面,您可以看到所有照片,并且可以将某些照片标记为固定照片。
这是我的减速器逻辑的一部分:
if (state.showAll.photos) {
const showAllState = state.showAll.photos;
showAllState.map(m => {
if (action.payload.id === m.id) {
m.pinned = true;
}
});
showAllAfterPin = showAllState;
} else {
showAllAfterPin = state.showAll.photos;
}
但是,我收到错误cannot read property 'photos' of undefined
并且我不确定我做错了什么。
答案 0 :(得分:0)
可能更容易将initialState
中的照片设置为空数组[]
而不是null
。
另一件事,你的reducer不应该改变你的状态对象。
执行const showAllState = state.showAll.photos
并不能使其成为新对象。
最后,showAllState.map(...)
需要在函数体内返回一个项目。它将创建一个新阵列。
这是你可以做的事情......
const { photos = [] } = state.showAll;
const updatedPhotos = photos.map(photo => {
if (action.payload.id === photo.id) {
return Object.assign({}, photo, { pinned: true })
}
return photo;
});
// return entire state if this is inside your root reducer
return {
...state,
showAll {
...state.showAll,
photos: updatedPhotos
}
}