#angular #typescript #rxjs #ngrx
#angular #typescript #rxjs #ngrx
Вопрос:
Я хотел бы получить состояние моего хранилища элементов, но я получаю сообщение об ошибке «не присваивается»
ItemReducer
export const initState: Item[] = [...];
export function ItemReducer(state = initState, action: ActionParent) {
switch (action.type) {
default:
return state;
}
}
ItemListComponent
export class myItemsComponent implements OnInit {
myItems: Observable<Item[]>;
constructor(private store: Store<{ items: Item[] }>) {}
ngOnInit(): void {
this.store
.select('items')
.subscribe((data: Item[]) => (this.myItems = data)); // error here
}
}
итак, у меня ошибка типа:
Type 'Item[]' is not assignable to type 'Observable<Item[]>'.ts(2322)
Type 'Item[]' is missing the following properties from type 'Observable<Item[]>': _isScalar, source, operator, lift, and 5 more.
Ответ №1:
myItems
является наблюдаемым. Пожалуйста, удалите подписку или измените тип myItems
. Предпочтительным способом должно быть удаление подписки (использование асинхронного канала).
Удалить способ подписки
ngOnInit(): void {
this.myItems = this.store.select('items');
}
Способ изменения типа
myItems: Item[];
Комментарии:
1. но если я удалю «subscribe» в ngOnInit, если я решу console.log (this.mapItems) Я не вижу элементы на консоли.
2. Да, потому что это наблюдаемое. Вы можете добавить оператор tap на случай, если захотите его дополнительно распечатать.
Ответ №2:
Вы определили myItems
его как наблюдаемые, но вы присваиваете ему данные с типом Item[]
. измените myItem
тип на Item[]
:
myItems: Item[];