清除部分状态

Clear part of the state

我对我想出的清除部分状态的解决方案有点怀疑。

我有一个名为 "Books" 的页面,我在其中找到了一系列书籍。每个书籍对象都包含该页面所需的非常少的信息。当用户点击一本书时,他们会被重定向到一个单独的书页,我会在其中获取完整的书本信息。

我的状态是这样的:

@State<any>({
  name: 'books',
  defaults: {
    books: [],
    selectedBook: null
  }
})

当用户离开单个书页时,我想清除 selectedBook 因为感觉很奇怪(至少对我来说)在应用程序的其他部分仍然有selectedBook 闲逛。

我想知道如何实现这一点,我能想到的最佳解决方案是从 books/:id 路线上的 [​​=14=] 守卫派遣 ClearSelectedBook 动作。

这里是 demo on StackBlitz

这是正确的方法吗?如果不是,还有哪些其他选择?

不确定是否有 正确的 方法,但另一种方法是使用 NGXS Router Plugin

状态可以处理 RouterNavigation 动作,并查看动作负载 - 如果它已经离开单个书页,则清除状态中的 selectedBook 值。

话虽如此 - 你使用显式操作的方法有它的优点(恕我直言) - 我可能会重命名它,也许是 UserLeftBookPage .. 然后让国家对此做出回应。而不是指示响应的操作名称。使用显式操作而不是利用路由器编写测试也更直接一些。