调度@ngrx / router-store操作时,Redux devtools扩展错误

时间:2017-04-19 19:46:05

标签: ngrx redux-devtools-extension

我正在使用以下库:

  • Angular 4
  • @ NGRX /路由器店内
  • @ NGRX /存储-devtools

就在最近,尝试将go路由器操作设置为当前活动路由时设置relativeTo

go(['test', id], {}, {relativeTo: this._active}))

我收到此错误:

ERROR TypeError: toISOString is not a function
    at String.toJSON (<anonymous>)
    at Object.<anonymous> (shim.js:736)
    at derez (<anonymous>:2:5166)
    at derez (<anonymous>:2:5787)
    at derez (<anonymous>:2:5787)
    at derez (<anonymous>:2:5787)
    at derez (<anonymous>:2:5787)
    at derez (<anonymous>:2:5605)
    at derez (<anonymous>:2:5787)
    at derez (<anonymous>:2:5787)
    at derez (<anonymous>:2:5787)
    at derez (<anonymous>:2:5787)
    at derez (<anonymous>:2:5605)
    at derez (<anonymous>:2:5787)
    at derez (<anonymous>:2:5787)

似乎处理有效负载中ActivatedRoute的devtools存在问题(类似于this issue)。

如果我实施go动作创建者的新版本(按照此处建议:Redux Devtools Extension Troubleshooting)向toJSON添加NavigationExtras功能,那么一切正常:

go(path: string|any[], query?: any, extras?: NavigationExtras): any {
    extras['toJSON'] = function(): any {
        return { ...this, relativeTo: this.relativeTo.snapshot.url };
    };

    const payload = { path, query, extras };
    return { type: routerActions.GO, payload };
}

还有其他人遇到过这个问题吗?有关如何解决此问题的任何建议吗?

更新:看起来它也与延迟加载的路线有关。如果当前路由是延迟加载模块的一部分(即通过loadChildren

,则只会发生错误

2 个答案:

答案 0 :(得分:0)

您很可能通过了无法序列化的React Synthetic事件。查看类似问题和故障排除。请注意,该问题的解决方案在React 16中不可用,因为我们依赖于React内部。因此,我建议您从troubleshooting.

中选择一种解决方案

然而,如果我们能让jsan不要抛弃这种情况,那将是很好的,但至少要跳过这些数据。如果你可以在那里添加带有测试用例的pr,那将非常感激。似乎toISOString的问题仅适用于特定事件,因为我无法重现。

答案 1 :(得分:0)

redux-devtools试图解析一个函数,因为json通常会工作,但它假设商店中的所有东西都是对象而不是函数,所以它打破了redux的基本思想是管理事件的状态使用发射功能使用角度标准