请协助,我正在用ngRx学习角度nx,并尝试实现基本状态。我有工作区,内部有一个名为company-portal的应用程序,具有自己的状态。创建状态我运行了以下命令:
ng generate ngrx company-state --module=apps/company-portal/src/app/app.module.ts --onlyEmptyRoot
在我创建一个名为login的库之后,如下所示:
ng g lib shared/login --routing --lazy --parent-module=apps/company-portal/src/app/app.module.ts
并添加了如下状态:
ng g ngrx login-state --module=libs/shared/login/src/lib/shared-login.module.ts
然后我创建了一个组件:
ng g c view/login-form --project=shared-login
在component.ts文件中,我注入了一个商店并添加了如下登录功能:
constructor(private store: Store<LoginSharedState>) {}
login() {
this.store.dispatch(new loginActions.LoginShared());
}
我有一个执行登录功能的按钮,但是当我单击该按钮时,应用程序冻结(停止响应)。我实现了storeFreeze并添加了metaReducer,但仍然无法正常工作。 单击登录按钮时,我应该添加些什么以使应用程序响应。
答案 0 :(得分:0)
它在您的代码中不可见,并且回答这个问题还为时已晚。但是也许我的见解可以帮助某个人。
我几乎每天都使用NgRX,并且我唯一看到它冻结(与NgRX有关)的情况是,有一种效果不会发出新动作,并且您没有使用选项{{ 1}},例如两个片段中展示的例子:
{ dispatch: false }
// Freezing
createEffect(() => this.actions$.pipe(
ofType(myAction),
tap(() => { /* do something */ })
))
没有必要使用// Not Freezing
createEffect(() => this.actions$.pipe(
ofType(myAction),
tap(() => { /* do something */ })
), { dispatch: false })
运算符,但这是一个常见的用例。就像我说的,这里重要的是,它不会在流中发出新的动作。您可以在official effects docs的最后一个片段中看到另一个演示。