我正在尝试使用 Angular 的新 Redux 实现(@reduxjs/angular-redux)。 我遵循了文档的入门和 TypeScript 指南。
我能够调度操作并更新商店。 我能够在用户执行点击等操作后从商店检索数据。
我能够在安装组件时分派操作,以便初始化存储中的数据,但我能够从
injectSelector
检索初始化的数据。组件似乎没有检测到更新已更新,因此没有重新渲染。
基本上,我的状态已更新并获得了正确的数据,但组件不会重新渲染。
AppComponent.ts:
@Component({enter image description here
selector: 'app-root',
standalone: true,
templateUrl: './app.component.html',
styleUrl: './app.component.scss',
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class AppComponent {
count = injectAppSelector((state) => state.counter.value);
dispatch = injectAppDispatch();
constructor() {
this.dispatch(increment());
}
ngOnInit() {
this.dispatch(increment());
}
}
app.component.html:
<pre>{{ count() }}</pre>
package.json 依赖项版本:
"dependencies": {
"@angular/animations": "^18.2.0",
"@angular/common": "^18.2.0",
"@angular/compiler": "^18.2.0",
"@angular/core": "^18.2.0",
"@angular/forms": "^18.2.0",
"@angular/platform-browser": "^18.2.0",
"@angular/platform-browser-dynamic": "^18.2.0",
"@angular/router": "^18.2.0",
"@reduxjs/angular-redux": "^1.0.0",
"rxjs": "~7.8.0",
"tslib": "^2.3.0",
"zone.js": "~0.14.10",
"@reduxjs/toolkit": "^2.2.7",
"redux": "^5.0.0"
},
"devDependencies": {
"@angular-devkit/build-angular": "^18.2.7",
"@angular/cli": "^18.2.7",
"@angular/compiler-cli": "^18.2.0",
"@types/jasmine": "~5.1.0",
"jasmine-core": "~5.2.0",
"karma": "~6.4.0",
"karma-chrome-launcher": "~3.2.0",
"karma-coverage": "~2.2.0",
"karma-jasmine": "~5.1.0",
"karma-jasmine-html-reporter": "~2.1.0",
"typescript": "~5.5.2"
}
我希望当我通过
injectAppSelector
将“count()”连接到商店时,并且当商店的状态发生变化时,由于“OnPush”策略,会自动检测到更改并更新视图。
如果我使用上面的代码运行应用程序,即使状态包含 2,我也会以 0 登陆页面。
我不知道我是否误解了 Angular 如何重新渲染视图,或者我是否错过了这个 Redux 实现中的某些内容。
这里是 Angular Redux 的维护者!
这是我们在 v1.0.0 中遇到的错误,根据您的报告,该错误现已在 v1.0.1 中修复。
尝试一下,让我们知道您的想法 - 谢谢!
https://github.com/reduxjs/angular-redux/releases/tag/v1.0.1