如何正确使用NgRx信号锁屏服务? Hooks 中的效果是否合适?

问题描述 投票:0回答:1

我正在与 NgRx Signals 合作,并试图找出在特定操作期间利用 ScreenLockService 锁定/解锁屏幕的最佳方法。以下是我当前使用 signalStore 的设置和用于管理屏幕锁定的服务:

export const BookStore = signalStore(
  withState(initialStore),
  withMethods((store,
               restService = inject(RestService)) => ({
    openModal: rxMethod<string>(
      pipe(
        tap(() => patchState(store, { isLoading: true })),
        switchMap((id) => {
          return from(restService.backendRestClient.getBook(id)).pipe(
            tapResponse({
              next: (books) => patchState(store, { books }),
              error: (err) => patchState(store, { error: err }),
              finalize: () => patchState(store, { isLoading: false })
            })
          );
        })
      )
    ),
  })),
  withHooks((store) => {
    const screenLockService = inject(ScreenLockService);

    return {
      onInit() {
        effect(() => {
          if (store.isLoading()) {
            screenLockService.lock();
          } else {
            screenLockService.unlock();
          }
        });
      },
    };
  })
);

我的问题:

在withHooks中使用effect是调用screenLockService.lock()和unlock()的正确方法吗? 是否有更好的方法来处理这种情况,也许不需要将屏幕锁定直接耦合到商店状态?

我正在考虑: 在 Hooks 之外使用 Store:

我应该将屏幕锁定逻辑移至另一个服务并在那里订阅商店状态更改吗? 替代模式:

使用 signalStore 时是否有一种更具声明性或集中化的方式来管理屏幕锁定等副作用? 寻找社区的见解或建议! 😊

angular signals ngrx
1个回答
0
投票

我找不到它的文档,但我认为你应该这样做。

withHooks({
  onInit: ({ isLoading }) => {
    if (isLoading) {
      screenLockService.lock();
    } else {
      screenLockService.unlock();
    }
  },
});

现在,当 isLoading 更改时,它应该更新锁屏

© www.soinside.com 2019 - 2024. All rights reserved.