#angular #rxjs #observable
Вопрос:
Я использую угловое управление состоянием BehaviourSubject
, но при перемещении данных для хранения добавляется undefined
значение в конец объекта (создается другое undefined
значение). может ли кто — нибудь предложить способ удаления?
{todos:[{"accountNo":"91957869","vpainfo":[{"vpa":"saasasa@fff"}]},undefined]}
Ниже приведены примеры фрагментов,
Поведенческий магазин.ts
import {Observable, BehaviorSubject} from 'rxjs';
export class Store<T> {
state$: Observable<T>;
private _state$: BehaviorSubject<T>;
protected constructor (initialState: T) {
this._state$ = new BehaviorSubject(initialState);
this.state$ = this._state$.asObservable();
}
get state (): T {
return this._state$.getValue();
}
setState (nextState: T): void {
this._state$.next(nextState);
}
}
Состояние поведения.ts
export interface User {
accountNo?: string;
vpainfo: VPAinfo[]
}
export interface VPAinfo {
vpa?: string;
}
export class BehaviourState {
todos: User[]
}
Приводитель поведения.ts
import { Injectable } from '@angular/core';
import { Store } from './behaviourStore';
import { BehaviourState } from './behaviourState';
import * as fromActions from '../actions/users.actions';
@Injectable()
export class BehaviourReducer extends Store<BehaviourState> {
constructor() {
super(new BehaviourState());
}
callReducer(action: any) {
switch (action.type) {
case fromActions.ADD_TODO:
this.setState({ ...this.state, todos: [action.payload.todo, ...this.state.todos] });
break;
}
}
}
И, наконец, добавление данных следующим образом,
const resultobj = {"accountNo":"91957869","vpainfo":[{"vpa":"saasasa@fff"]};
const action = { type: fromActions.ADD_TODO, payload: { todo: resultobj}};
this.behaviourReducer.callReducer(action);
Ответ №1:
Поскольку вы не определили какое-либо значение по умолчанию для задач. Это показывает неопределенность.
Попробуй это:
export class BehaviourState {
todos: User[] = [];
}
Ответ №2:
Это происходит потому , что начальное значение todos
is undefined
, поэтому вам нужно либо присвоить ему начальное значение в BehaviourState
классе, например:
export class BehaviourState {
todos: User[] = [];
}
Или путем обработки нулевого/неопределенного значения в пределах reducer
, подобных следующему:
this.setState({ ...this.state, todos: [action.payload.todo, (...this.state.todos || [])] });