Состояния распространения NGXS в setState

import { State, Action, StateContext } from '@ngxs/store';

export class FeedAnimals {
  static readonly type = '[Zoo] FeedAnimals';
}

export interface ZooStateModel {
  feed: boolean;
}

@State<ZooStateModel>({
  name: 'zoo',
  defaults: {
    feed: false
  }
})
export class ZooState {
  @Action(FeedAnimals)
  feedAnimals(ctx: StateContext<ZooStateModel>) {
    const state = ctx.getState();
    ctx.setState({
      ...state,
      feed: !state.feed
    });
  }
}

Я изучаю ngxs из gitbook, вышеприведенный блок скопирован оттуда. В этом примере ...state назначено объекту. зачем нам это? поэтому у нас есть только один фид свойств объекта и уже назначено feed: !state.feed


person Kad    schedule 02.06.2019    source источник


Ответы (1)


Вам нужно использовать ... состояние, потому что вы хотите изменить состояние текущего состояния

Используя оператор распространения, вы выполняете операцию копирования, поэтому предыдущее состояние будет скопировано в новый объект состояния, и вы измените данные в новом созданном объекте состояния.

const a = [1, 2, 3]

const b = [...a, 4, 5, 6] =>  [1, 2, 3, 4, 5, 6]

Итак, этот код

...state,
feed: !state.feed

Вы делаете новую копию объекта состояния и изменяете свойство фида внутри вашего объекта состояния.

person Tony Ngo    schedule 02.06.2019
comment
хорошо, я знаю, но пример объекта состояния только для фида, почему используется ... состояние? - person Kad; 02.06.2019
comment
Я просто объясняю вам, что вы используете... состояние для копирования объекта текущего состояния в объект нового состояния и изменения этого нового состояния. - person Tony Ngo; 02.06.2019