从状态中抽象选择器和操作处理程序



我想知道是否可以将@State类中的@Selectors和/或@Action处理程序抽象到单独的文件中?随着状态变得越来越大,选择器越来越复杂,我想将它们移动到一个单独的文件中,以保持状态类的清洁。在NGXS中有什么方法可以做到这一点吗?

编辑:为了将来参考,我在NGXS松弛频道上得到了答案,这确实是可能的。我们可以创建一个单独的选择器类来存储我们所有的选择器,并将感兴趣的状态作为参数传递给它们。

export class EntityStateSelectors {
@Selector([EntityState])
thing(state: EntityStateModel) {
return state.thing;
}
}

到目前为止,我还没有弄清楚如何对操作处理程序做同样的事情,但是将选择器提取到一个单独的文件中已经清理了很多状态类!

您可以为选择器使用单独的文件,强烈建议您使用。您可以使用如下内容创建类似app.selectors.ts的文件:

export class AppSelectors {
@Selector([AppState])
static viewModel(state: AppStateModel) {
// your selector logic here
}
}

然后,您可以在组件中正常使用,如下所示:

@Component({...})
export class AppComponent {
@Select(AppSelectors.viewModel) vm$: Observable<ViewModel>;
}

这大大减少了app.state.ts文件的大小,因为它只保留了操作处理程序。此外,这使您的代码更易于测试,因为您的选择器只是纯函数

最新更新