【问题标题】:$$typeof property requested by redux(?) and it's missingredux(?) 请求的 $$typeof 属性并且它丢失了
【发布时间】:2020-01-28 23:09:18
【问题描述】:

我正在重构我的 redux 代码,我决定用枚举替换作为我的操作类型的字符串。我创建了一个这样的类:

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',
});

不幸的是,我的应用程序已经开始崩溃,并显示如下消息

错误:$$typeof 不是 [object Object] 的有效枚举值。

我绝对不是要求获得$$typeof。我对ActionTypes 枚举所做的只是将其作为我发送的消息的一部分,然后在我的 reducer 的 switch 语句中使用它。

我注意到,如果我通过向处理程序的get 添加代码来处理这种情况,我的应用程序就可以正常工作,如果prop == '$$typeof' 则返回stringundefined。我可以把它留在那里,但我想了解发生了什么。

我的问题是:

  • $$typeof 是什么?
  • 什么可能试图访问它,为什么?

【问题讨论】:

    标签: javascript redux enums typeof


    【解决方案1】:

    虽然这不是您问题的直接答案,但请注意your action types should always be stringsyou should not put non-serializable values like class instances into your actions。我强烈建议您改用以前的方法。

    作为相关的一点,请考虑使用our new official Redux Toolkit package,其中包括用于简化几个常见 Redux 用例的实用程序,包括存储设置、定义 reducer、不可变更新逻辑,甚至一次创建整个状态“切片”。特别是,如果您使用createSlice function,它会自动生成动作类型和动作创建者,因此您不必手动编写它们。

    【讨论】:

    • 如果我理解正确,通过在dispatch 中使用ActionTypes.SOME_ACTION,我实际上是在使用一个以奇特方式获取的字符串。我没有传递 Enum 实例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    相关资源
    最近更新 更多