Почему набор не вызывает смену магазина? - PullRequest
0 голосов
/ 08 октября 2019

Мой магазин похож на это

export interface State extends EntityState<featureModels.IModel> {
  selectedModelsId: Set<number>;
  isLoading?: boolean;
  error?: any;
}

У меня есть следующее действие:

export class SelectModels implements Action {
  public readonly type = ActionTypes.SelectModels;
  constructor(public payload: {modelsIds: Array<number>}) {}
}

И триггер действия этого редуктора

const SELECT_MODELS = (state: State, action: featureAction.SelectModels) => {
  console.log(new Set([...Array.from(state.selectedModelsId), ...action.payload.modelsIds]));
  return {
    ...state,
    selectedModelsId: new Set([...Array.from(state.selectedModelsId), ...action.payload.modelsIds]),
  };
};

Действиеотправил правильно, Журнал в порядке, он отображает то, что я хочу.

Но в инспекторе избыточности я вижу, что в состоянии нет никаких изменений. Но на самом деле он должен измениться, поскольку вместо пустого набора у меня должен быть набор с некоторым значением (например, отображение console.log)

почему?

РЕДАКТИРОВАТЬ 1:

Я попробовал простое:

  return {
    ...state,
    selectedModelsId: 1234,
  };

, но

  return {
    ...state,
    selectedModelsId: new Set(3),
  };

не

РЕДАКТИРОВАТЬ 2:

const SELECT_MODELS = (state: State, action: featureAction.SelectModels) => {
  console.log(new Set([...Array.from(state.selectedModelsId), ...action.payload.modelsIds]));
  console.log({
    ...state,
    selectedModelsId: new Set([...Array.from(state.selectedModelsId), ...action.payload.modelsIds])
  });
  return {
    ...state,
    selectedModelsId: new Set([...Array.from(state.selectedModelsId), ...action.payload.modelsIds])
  };
};

Даже в этом случае журнал корректен с selectedModelsId: Set(1) {3}, но в прижатии есть (states are equal)

РЕДАКТИРОВАТЬ 3:

Я изменил все в массив, теперь он работает ... но почему бы не работать с набором?

1 Ответ

1 голос
/ 08 октября 2019

A Set не сериализуем, поэтому devtools не будет правильно читать его. Массив является сериализуемым, и devtools может читать значения.

...