减速机无法读取物业照片'未定义?我究竟做错了什么?

时间:2016-11-22 00:15:03

标签: javascript redux

这是我的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并且我不确定我做错了什么。

1 个答案:

答案 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
   }
}