Angular 6 ngrx Почему селектор получает объект с лишним свойством? - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть selectror 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?В конце концов, это свойство отсутствует в интерфейсе магазина ChatStore

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Поскольку вы ввели еще один уровень объекта, указав на «данные»

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) 
);
0 голосов
/ 19 декабря 2018

Вы создали data свойство здесь:

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

Вам нужно посмотреть на chatReducer как на объект, которым он является.Если вы не хотите иметь свойство data, все, что вам нужно, это

 StoreModule.forRoot(chatReducer). 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...