代码之家  ›  专栏  ›  技术社区  ›  Masquitos

Angular 6 ngrx为什么选择器获取具有多余属性的对象?

  •  2
  • Masquitos  · 技术社区  · 7 年前

    export const selectConversations = (state: any): Conversation[] => {.....};

    这是存储接口

        export interface ChatStore {
        participants: { [key: number]: User };
        conversations: { [key: number]: Conversation };
        messages: { [key: number]: Message };
    }   
    

    StoreModule.forRoot({ data: chatReducer })

    这是减速机

    export function chatReducer(state: ChatStore = INITIAL_CHAT_STORE_DATA, action: ChatActions.Actions): ChatStore {...} 
    

    这是我的减速机内的函数

    export function handleLoadCompleteConversations(state: ChatStore, action: LoadCompleteConversations): ChatStore {
        const newStoreState = _.cloneDeep(state);
        newStoreState.conversations = _.keyBy(action.payload, 'id');
        console.log('newStoreState', newStoreState);
        return newStoreState;
    }    
    

    问题是我的选择器像对象一样

           { data: {
        participants: { [key: number]: User };
        conversations: { [key: number]: Conversation };
        messages: { [key: number]: Message };
    }}    
    

    房产在哪里 data 添加了什么?毕竟,store接口中没有该属性 ChatStore

    2 回复  |  直到 7 年前
        1
  •  1
  •   jakubm    7 年前

    你创造了 data 物业地址:

     StoreModule.forRoot({
      data: chatReducer // <----- data points to chatReducer which returns state object.
    })
    

    您需要将chatReducer视为一个对象。如果你不想 “数据”属性,那么您只需要

     StoreModule.forRoot(chatReducer). 
    
        2
  •  1
  •   rijin    7 年前

    StoreModule.forRoot({
      data: chatReducer <-- here
    })
    

    换成这个

    StoreModule.forRoot(chatReducer)
    

    export const selectConversations = (state: any) => state.conversations;
    

    export const selectFirstTenConversations = createSelector(
      selectConversations, conversations => conversations.slice(0,10) 
    );
    
    推荐文章