#angular #ngrx #ngrx-store #ngrx-effects
#angular #ngrx #ngrx-store #ngrx-эффекты
Вопрос:
Итак, с момента обновления V10 до NGRX вы больше не можете передавать тип действия эффекту, поскольку действия теперь объявляются как функции вместо классов. Есть ли еще способ справиться с этим в V10?
export const myAction = createAction(
'[myAction]',
props<{person: User}> ()
);
@Effect({ dispatch: false })
x = this.actions$.pipe(
ofType**<myAction>**('[myAction]'),
У меня нет доступа к person prop. Где до версии 10 вы это делали, потому что это был класс…
Ответ №1:
См . https://ngrx.io/guide/effects#incorporating-state
- Переходите
myAction
непосредственно кofType
- Действие вводится в соответствии с его реквизитами, поэтому вы можете просто использовать
action.person
@Effect({ dispatch: false })
x = this.actions$.pipe(
ofType(myAction),
map(action => of(action.person))
);
Также было бы предпочтительнее использовать новый createEffect
синтаксис.
Stackblitz: https://stackblitz.com/edit/so-ngrx-oftype?file=index.ts
Комментарии:
1. Спасибо, что нашли время, чтобы посмотреть на это @wlf. Проблема, похоже, все еще присутствует, хотя говорится, что «Свойство ‘person’ не существует для типа ‘never’. Есть мысли по этому поводу? Спасибо, что показали новый синтаксис, я не знал, что это изменилось :).
2. В моем stackblitz типы правильные. Вы можете проверить, наведя
action
курсор мыши на карту или используя intellisense, чтобы увидеть элементы. Вероятно, это зависит от того, как вы используете предыдущие операторы — сверьтесь с моим примером, и если вы не можете заставить его работать, создайте stackblitz (или форк из моего), и я посмотрю.3. Я увидел свою ошибку, я все еще передавал строку по-старому, в отличие от передачи в action creator. Я и не подозревал, что они это изменили. Спасибо за вашу поддержку! ** если кто-то еще сталкивается с этой проблемой, передайте ActionCreator не строку, и все готово. Краткий обзор @wlf».