1

我正在使用以下库:

  • 角 4
  • @ngrx/路由器商店
  • @ngrx/store-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)

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

如果我实现了新版本的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 };
}

有没有其他人遇到过这个问题?对于如何解决这个问题,有任何的建议吗?

更新:看起来它也与延迟加载的路由有关。仅当当前路由是延迟加载模块的一部分时才会发生错误(即 via loadChildren

4

2 回答 2

0

很可能您正在传递一个无法序列化的 React Synthetic Event。请参阅类似问题和故障排除。请注意,该问题的解决方案在 React 16 中将不可用,因为我们依赖于 React 内部。因此,我建议从故障排除中选择一种解决方案。

但是,如果我们能让 jsan 在这种情况下不抛出,但至少跳过那些数据,那就太好了。如果您可以在那里添加带有测试用例的 pr,将不胜感激。似乎 toISOString 的问题仅针对特定事件,因为我无法重现。

于 2017-06-13T21:47:02.457 回答
0

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

于 2017-09-01T13:56:33.357 回答