ngrx store select 总是返回 undefined

ngrx store select always returning undefined

尝试在项目中使用 ngrx 并卡住 store.select 总是返回未定义。该操作似乎已被分派,我可以看到有效载荷有数据。我什至可以在 Redux DevTools 中看到数据,但不知何故它永远不会到达控制器。我做了一个测试 github 回购,因为这里粘贴的代码太多了。我尝试了很多最终放弃的组合,所以非常感谢对我做错事的任何帮助。我希望有人能帮助我。

https://github.com/lawphotog/simplest_ngrx

您正在尝试 return store.photos,但您的商店似乎没有 photos 条目。您使用 StoreModule.forRoot({reducer}) 设置了您的商店。你的减速器看起来像这样

case fromPhotos.PhotosActionTypes.LOAD_PHOTOS_SUCCESS: 
  console.log('payload: ' + JSON.stringify(action.payload))
  return action.payload;
default:
  return state;

action.payload是一个数组。所以,在你完成 fromPhotos.PhotosActionTypes.LOAD_PHOTOS_SUCCESS 之后,你的商店看起来像(我认为):

{
  reducer: []
}

您正在尝试从不存在的商店购买 store.photos。你应该尝试 store.reducer 看看会发生什么。

综上所述,在我看来,您的商店设置非常不稳定。我建议前往 NGRX 并查看他们的 example app / 文档(注意,他们正在更新 NGRX v5 的文档(尚未发布),所以文档不是' t 100% 电流)。例如,我经常看到的商店模式(不是我是专家)类似于

{
  photosReducer: {
    photos: []
  }
}

然后你可以 select 照片 store.select(store => store.photosReducer.photos。或者,我使用的方法store.select('photosReducer', 'photos')。此外(也许这只是因为您正在试验)但是您的 fromPhotos.PhotosActionTypes.LOAD_PHOTOS_SUCCESS 操作应该将其结果合并到商店中(目前,您用结果替换了整个商店)。像

case fromPhotos.PhotosActionTypes.LOAD_PHOTOS_SUCCESS: 
  console.log('payload: ' + JSON.stringify(action.payload))
  return { 
    ...state,
    photos: action.payload;
  }
default:
  return state;