我试图通过属性过滤出有效负载数据。
//reducer.ts
case MessagesActionTypes.LOAD_Message_SUCCESS: {
console.log('reducer='+
JSON.stringify(action.payload.Messages));//receiving data here
return adapter.addAll(action.payload.Messages, state);
}
export const getSelectedMessageId = (state: MessageState) => state.selectedMessageId;
// get the selectors
const { selectIds, selectEntities, selectAll, selectTotal } = adapter.getSelectors();
// select the array of Messages
export const selectAllMessages = selectAll;
下面是选择器
// Selector.ts
export const selectHomeQueues = createSelector(
fromReducer.selectAllMessages,
(messages) => messages.filter(message => message.queue === 'HOME')
);
我是,在还原程序中接收数据,但是在运行时ERROR TypeError: Cannot read property 'map' of undefined
中,在选择器中获取错误
注意:我还没有在NGRX实体选择器中找到任何过滤的例子。
如何过滤NGRX实体中的选择器?
发布于 2019-05-14 13:58:58
我也有同样的问题。您需要将选择器稍微更改为:
export const selectHomeQueues = createSelector(
selectAllMessages,
(messages) => messages.filter(message => message.queue === 'HOME')
);
其中selectAllMessages
是一个选择器,您只将其定义为:
export const selectAllMessages = createSelector(
fromReducer.selectAllMessages
);
我们最初尝试这样做的方式是通过适配器,我怀疑我们在此过程中犯了一个小错误或误解。
这个问题是由于棱角版或redux版本升级的结果而产生的。不确定数字。
发布于 2018-10-23 16:43:45
我想你可以这样做:
const getSelectHomeQueues = (store) => {
return store.select(fromReducer.selectAllMessages)
.filter(message => message.queue === 'HOME')
}
无论你想在哪里使用它:
getSelectHomeQueues(this.store).subscribe(...)
发布于 2018-10-23 16:58:45
错误“无法读取未定义的属性'map‘表示您在其他地方收到了错误,因为在您在问题中提供的代码中,我们在任何地方都看不到map
。
在您的选择器中,您正在对messages
进行筛选,它将传递从未使用过的header
。您似乎不是在过滤单个消息,而是筛选消息队列,因此:
export const selectHomeQueues = createSelector(
fromReducer.selectAllMessages,
(messages) => messages.queue === 'HOME'
);
https://stackoverflow.com/questions/52953910
复制相似问题