Почему immer жалуется на вычисляемые свойства? - PullRequest
1 голос
/ 09 ноября 2019

Итак, основываясь на недавнем ответе, я начал использовать ReduxStarterKit, который использует Immer в своей функции слайса. В целом, я думаю, что основная идея блестящая.

К сожалению, когда я пытаюсь реально использовать immer для облегчения моей жизни, я сталкиваюсь с проблемами. Я попытался упростить то, что я делаю, используя мой тестовый редуктор, и у меня все та же основная проблема. Я также отключил все свое промежуточное программное обеспечение (ElectronRedux), чтобы убедиться, что это не проблема. Ниже приведен упрощенный тестовый редуктор, который я использую для тестирования:

const CounterSlice = createSlice({
  name: 'counter',
  reducers: {
    increment: (state)=>{state.value = state.value + 1},
    decrement: (state)=>{state.value = state.value - 1}
  },
  initialState: { value: 0 },
})

Приведенный выше код довольно прост, и, насколько я могу сказать, точно , что мне нужен Immer / ReduxStarterKitнаписать. Несмотря на это, когда я вызываю код, я получаю сообщение об ошибке: Uncaught Error: Immer drafts cannot have computed properties

Что я делаю не так?

Редактировать:

Я просто собрал простоеДемо-приложение, только для целей тестирования основ. Кодированный срез здесь работает отлично. Я полагаю, что это взаимодействие между Immer и другим пакетом, но я не уверен, что делать с отладкой, которая one . Является ли это проблемой версии с редуксом, электронным, электронным, электронным, машинописным, веб-пакетом, список можно продолжать и (мучительно) продолжать.

Возможно, мне придется пересоздать основную среду моего приложения и протестировать этот один болезненный шаг ввремя. Тьфу!

1 Ответ

1 голос
/ 09 ноября 2019

Оказывается, проблема была не в коде, которым я делился, а в стороне, когда я настраивал свое исходное состояние. Electron манипулировал данными, которые я отправлял туда и обратно через getState (), добавляя методы getter и setter. Эти методы получения и установки вызывали (совершенно правильно) эту ошибку.

const initialState = remote.getGlobal('state');
console.log("initial state: ", initialState);
const store = CreateStore({initialState:{...initialState}, main: false})

Ожидаемый вывод журнала: { counter: { value: 1 } ...rest}, но фактический вывод был { counter: {value: 1, getValue: function(), setValue: function() }, getCounter: function(), setCounter: function(), ...rest.

Woops. Теперь мне просто нужно «очистить» свое состояние, так как, очевидно, хранилище состояний каким-то образом сохраняет этот сбой. А затем выясните, как убрать (вложенные!) Геттеры / сеттеры. Тьфу.

...