неопределенное состояние ngrx при запуске приложения, StoreModule.forRoot() не настроен

Я использую redux в Angular, используя ngrx. Но сначала я получаю значение undefined, почему

вот мой код не запускайте это в chrome (проблема в stackblitz в браузере chrome) Пожалуйста, используйте другой браузер.

https://stackblitz.com/edit/angular-sz7rul?file=src%2Fapp%2Findex.ts

const getProductFeatureState =createFeatureSelector<fromProduct.ProductState>('productFeature')

export const getProducts = createSelector(
  getProductFeatureState,
  state => {

    console.log(state);
    return state.products
  }
);

Я печатаю свое состояние, оно дает мне undefined. Пожалуйста, помогите. Осмотрите элемент и посмотрите на ошибку

preview-fe7237b13d780dbf847da.js:1 ERROR TypeError: Cannot read property 'products' of undefined
    at eval (VM2486 index.ts:15)
    at eval (selector.js:84)
    at memoized (selector.js:34)
    at defaultStateFn (selector.js:58)
    at eval (selector.js:87)
    at MapSubscriber.memoized [as project] (selector.js:34)
    at MapSubscriber._next (map.ts:78)
    at MapSubscriber.Subscriber.next (Subscriber.ts:102)
    at State.BehaviorSubject._subscribe (BehaviorSubject.ts:24)
    at State.Observable._trySubscribe

person user5711656    schedule 03.07.2018    source источник


Ответы (2)


Вы неправильно настраиваете NgRx. В AppModule нужно использовать StoreModule.forRoot(...). В функциональном модуле вы будете использовать StoreModule.forFeature(...). Чтобы ваш пример работал, я исправил его здесь: https://stackblitz.com/edit/angular-8tuwu8?file=src/app/index.ts

См. пример приложения здесь: https://github.com/ngrx/platform/tree/master/example-app

person Envil    schedule 03.07.2018
comment
у меня нет функционального модуля, поэтому я использую StoreModule.forRoot(...) - person user5711656; 03.07.2018
comment
нет ngmodule продукта. - person user5711656; 03.07.2018
comment
@user5711656 user5711656 да, поэтому настройка неверна, StoreModule.forRoot(...) требует гораздо большей настройки, чем StoreModule.forFeature(...). Вот как это настроить: github. com/ngrx/platform/blob/master/example-app/app/reducers/ - person Envil; 03.07.2018
comment
@user5711656 user5711656 Я обновил свой ответ, добавил, как правильно настроить его для StoreModule.forRoot() - person Envil; 03.07.2018

Вы создаете featureSelector без каких-либо функциональных модулей, загруженных в магазин (в вашем коде нет StoreModule.forFeature('products', reducer))

попробуйте это в коде селектора index.ts:

export const getProducts = (state: fromProduct.ProductState) => state.products;
person Tim Martens    schedule 03.07.2018
comment
все еще не работает stackblitz.com/edit/angular-sz7rul?file =src%2Fapp%2Findex.ts - person user5711656; 03.07.2018