Люди, кажется, сосредоточены на тривиальных вещах.
Так что я прямо отвечу на ваш вопрос:
a select
в магазине прослушивает dispatch
событий в его наиболее простой реализации.
Вы дважды звоните dispatch
, ваша подписка вызывается дважды.
Теперь это может измениться с эффектами и так далее, но я предполагаю, что у вас их нет.
Если он вызывается дважды, то это потому, что для вашего магазина создается значение по умолчанию В ваших редукторах подпись
(state: MyState, action: MyAction implements Action) => any
И вообще, вы это так выразились
myReducer(state: MyState = undefined, action: MyAction implements Action) { ... }
Это означает, что ваше первое значение равно undefined
, и если вы вызываете dispatch, ваше второе значение будет определено.
Вот откуда приходят два звонка.
И, как примечание, вы можете оставить это в конструкторе, это ни черта не изменит.
EDIT
Чтобы игнорировать первое значение, вы можете использовать filter
или skip
(не все сразу, выберите одно в зависимости от того, что вы хотите):
this.subscription = this._store.select('reduxObj').pipe(
// For an array, will ignore all empty arrays
filter(value => value.length),
// For undefined, will ignore all falsy values
filter(value => !!value),
// Ignore first value only
skip(1),
)