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