发布
社区首页 >问答首页 >角& NGRX:使用NGRX实体对选择器进行滤波

角& NGRX:使用NGRX实体对选择器进行滤波
EN

Stack Overflow用户
提问于 2018-10-23 16:34:59
回答 3查看 6.9K关注 0票数 4

我试图通过属性过滤出有效负载数据。

代码语言:javascript
代码运行次数:0
复制
 //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;

下面是选择器

代码语言:javascript
代码运行次数:0
复制
 //     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实体中的选择器?

EN

回答 3

Stack Overflow用户

发布于 2019-05-14 13:58:58

我也有同样的问题。您需要将选择器稍微更改为:

代码语言:javascript
代码运行次数:0
复制
export const selectHomeQueues = createSelector(
  selectAllMessages,
 (messages) => messages.filter(message => message.queue === 'HOME')
 );

其中selectAllMessages是一个选择器,您只将其定义为:

代码语言:javascript
代码运行次数:0
复制
export const selectAllMessages = createSelector(
  fromReducer.selectAllMessages
 );

我们最初尝试这样做的方式是通过适配器,我怀疑我们在此过程中犯了一个小错误或误解。

这个问题是由于棱角版或redux版本升级的结果而产生的。不确定数字。

票数 6
EN

Stack Overflow用户

发布于 2018-10-23 16:43:45

我想你可以这样做:

代码语言:javascript
代码运行次数:0
复制
const getSelectHomeQueues = (store) => {
    return store.select(fromReducer.selectAllMessages)
        .filter(message => message.queue === 'HOME')
}

无论你想在哪里使用它:

代码语言:javascript
代码运行次数:0
复制
getSelectHomeQueues(this.store).subscribe(...)
票数 0
EN

Stack Overflow用户

发布于 2018-10-23 16:58:45

错误“无法读取未定义的属性'map‘表示您在其他地方收到了错误,因为在您在问题中提供的代码中,我们在任何地方都看不到map

在您的选择器中,您正在对messages进行筛选,它将传递从未使用过的header。您似乎不是在过滤单个消息,而是筛选消息队列,因此:

代码语言:javascript
代码运行次数:0
复制
export const selectHomeQueues = createSelector(
  fromReducer.selectAllMessages,
 (messages) => messages.queue === 'HOME'
 );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52953910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档