gpt4 book ai didi

angular - NgRx 无需订阅即可获取值(value)

转载 作者:行者123 更新时间:2023-12-03 19:20:58 24 4
gpt4 key购买 nike

我正在努力解决一些问题 ngrx教程,我想我开始让我的大脑围绕它。

我不明白的是如何做一些像从 Store 获取值这样简单的事情。 :

目标 : 从商店获取一个值而不必subscribe到它。
IE: store.myStorePropertystore.getValue(<selector>)或者 ?

据我所知,从商店获取值(value)的唯一方法是做这样的事情:

  private readonly _store: Store<ApplicationState>;
// ...
this._store.select(state => state.currentUser).subscribe(user => {
if (!user) { return; }
// ...
});

问题 :有没有什么方法可以“立即”从商店中获取值(value)而无需订阅?

我可能只是在思考问题 selectors但我有点认为这就是他们的目的。文档中的示例:
import { createSelector } from '@ngrx/store';

export interface FeatureState {
counter: number;
}

export interface AppState {
feature: FeatureState;
}

export const selectFeature = (state: AppState) => state.feature;

export const selectFeatureCount = createSelector(
selectFeature,
(state: FeatureState) => state.counter
);

在这个例子中,我想我可以调用 selectFeature或传递给 this._store.select(selectFeature)获取实际值,但它返回 observable (因此希望您订阅它)。

我的主要用例是我想在我的应用程序的整个生命周期中访问当前用户信息。我有一个 effect这是从服务器获取该信息,并且一切正常。但是,我对如何简单地从 store 访问值感到有些困惑。无需洒 .subscribe到处。

是的,我见过 this但这对我没有帮助。

最佳答案

您如何添加自己的订阅功能并每次都调用它?

  getValue(obj: Observable<any>){
let value: any;
obj.subscribe(v => value = v);
return value;
}


showme(){
console.log(this.getValue(this.user$)); // single value => works
console.log(this.getValue(this.projects$)); // array => works
}

请注意,您失去了 observables 的魔力,因此当值发生变化时,它不会更新您的前端等......当被问及该值时,您将及时获得该值。

refence to stackblitz demo

您调用选择器的方式似乎是错误的,您应该像这样导入它们:
import * as fromAuth from '../../auth/state/reducers';
import * as fromData from '../../data/state/reducers';

你像这样构建你的构造函数:
constructor(private store: Store<fromAuth.State & fromData.State>) {

你的选择可能是这样的,

this.user$ = store.pipe(select(fromAuth.getUser));
let user = this.getValue(store.pipe(select(fromAuth.getUser))); // this would get you the current user value


Check out the ngrx example app特别是我正在引用的这个索引页面,以检查选择器。
Check out this sample关于他们如何使用选择器和导入状态

通常您构建容器和组件。您构建了一个容器,负责从存储中获取数据,然后您将其与异步管道一起传递到负责显示的下一个容器或组件。使用 ngOnChanges,您可以检测更改并相应地更新前端。

关于angular - NgRx 无需订阅即可获取值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59296040/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com