Свойство $$ typeof запрошено приставкой (?) и оно отсутствует - PullRequest
0 голосов
/ 29 января 2020

Я делаю рефакторинг своего редукционного кода и решил заменить строки, служащие моими типами действий, на enum. Я создал такой класс:

class Enum {
  constructor(enumObj) {

    const handler = {
      get: function(obj, prop) {
        if (prop in obj) {
          return obj[prop];
        }
        throw new Error(`${prop} is not a valid enum value for ${enumObj}`);
      }
    }
    return new Proxy(Object.freeze(enumObj), handler)
  }
}

export const ActionTypes = new Enum({
  SOME_ACTION: 'SOME_ACTION',
  ANOTHER_ACTION: 'ANOTHER_ACTION',
});

К сожалению, мое приложение начало обрабатывать sh с сообщением типа

Ошибка: $$ typeof не является допустимым значением перечисления для [object Object].

Я определенно не запрашиваю получение $$typeof. Все, что я делаю с перечислением ActionTypes, включает это как часть моих отправленных сообщений, а затем использую его в выражении-переключателе в моем редукторе.

Я заметил, что мое приложение работает нормально, если я обработаю этот случай добавление кода к get обработчика, который возвращает string или undefined, если prop == '$$typeof'. Я мог бы просто оставить это там, но я хочу понять, что происходит.

Мой вопрос:

  • Что $$typeof?
  • Что может пытаться получить к нему доступ и почему?

1 Ответ

1 голос
/ 29 января 2020

Хотя это не прямой ответ на ваш вопрос, обратите внимание, что ваши типы действий должны всегда быть строками , а вы должны не вставлять несериализуемые значения, такие как экземпляры классов, в ваши действия . Я настоятельно рекомендую вам вернуться к использованию предыдущего подхода.

В качестве связанного момента, пожалуйста, обратите внимание на использование нашего нового официального пакета Redux Toolkit , который включает в себя утилиты для упрощения нескольких распространенных Redux. варианты использования, включая настройку магазина, определение редукторов, неизменную логику обновлений c и даже создание целых «кусочков» состояния одновременно. В частности, если вы используете функцию createSlice , она автоматически генерирует типы действий и создателей действий, поэтому вам не нужно писать их вручную.

...