ngrx store select始终返回undefined

时间:2018-01-08 13:11:50

标签: angular redux ngrx ngrx-store ngrx-effects

尝试在项目中使用ngrx并卡在store.select中,始终返回undefined。似乎已分派动作,我可以看到有效负载具有数据。我甚至可以在Redux DevTools中看到数据,但不知怎的,它永远不会到达控制器。我已经制作了一个测试github repo,因为这里会粘贴太多代码。我已经尝试了最终放弃的许多组合,所以非常感谢我做错了什么。我希望有人可以帮助我。

https://github.com/lawphotog/simplest_ngrx

1 个答案:

答案 0 :(得分:3)

您尝试返回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 / docs(请注意,他们正在更新NGRX v5的文档(尚未发布) ,所以文档不是100%当前的)。例如,我经常在商店看到的模式(不是我的专家)就像是

{
  photosReducer: {
    photos: []
  }
}

然后您可以选择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;