【问题标题】:Equivalent to getState() method of react-redux in ngrx | Angular 6 | ngrx 6相当于ngrx中react-redux的getState()方法|角 6 | ngrx 6
【发布时间】:2019-12-02 06:36:06
【问题描述】:

我使用 react 和 redux 创建了一个应用程序。其中我使用 getState() 来获取商店的状态,并像这样通过破坏来获取特定的切片。

const { user } = getState();

现在我想转到 Angular 6 中的应用程序。我安装了 ngrx v6.0。我阅读了文档,但没有找到获取用户切片的方法。 但是,我认为我可以通过创建这样的选择器来实现这一目标

export const selectUser = (state: AppState) => state.user;

但我需要订阅该选择器并像这样获取用户状态。

this.store.pipe(select(fromRoot.selectUser)).subscribe(
        user => this.user = user
    )

我需要像下面这样创建手动功能吗?

function getState(store: Store<State>): State {
    let state: State;

    store.take(1).subscribe(s => state = s);

    return state;
} 

有人可以为此提供最佳解决方案还是我错过了什么?

我还面临创建选择器的另一个问题。我使用有效负载 userData 发送一个动作(来自 API 响应) AppComponent@ngOnInit() this.store.dispatch(new LoadUserAction(this.userData));

但是当我使用用户选择器在功能模块的组件中获取用户状态片时 HomeComponent@ngOnInit()

this.store.pipe(select(fromRoot.selectUser)).subscribe(
            user => this.user = user //user is same as intial not the updated one.

        )

我没有立即获得数据。始终返回初始状态。

我需要使用效果还是放置一些 if 条件?

有人可以向我解释在从第一个选择器获取正确数据后如何执行另一个操作吗?

【问题讨论】:

  • 你想获取组件中的数据还是视图中的数据?
  • 在组件中。我想先修改数据,设置组件的属性值。
  • 我认为我们在这里缺少一些链接。您的第一个问题是是否可以立即到达商店。最好创建另一个关于为什么您的选择器无法正常工作的问题并提供更多代码。您是否为该调度的操作使用效果?你只有减速机吗?
  • 我现在只使用减速器。这是另一个问题的链接。 stackoverflow.com/questions/57182646/…

标签: angular reactjs typescript redux ngrx


【解决方案1】:

是的,NgRx 没有即时的get() 方法来访问您商店的一部分。我找不到它,但在 GitHub 上有一个问题,他们说在第一个版本中他们有它,但人们没有正确使用它,所以他们删除了它,现在你只得到 Observables。

你的

this.store.pipe(select(fromRoot.selectUser)).subscribe(
  user => this.user = user
)

是正确的。您只需要记住取消订阅即可。

如果可以的话,存储整个 Observable 没有问题,而不必订阅它。 Angular 有一个异步管道,因此您可以轻松地在模板上使用 Observables,并且您始终可以对该 Observable 进行操作并返回一个新的 Observable 以满足您的需求。

Ps:最好使用createSelector方法。

export const selectUser = createSelector(
  selectAppState,
  (state: AppState) => state.user;
);

【讨论】:

  • 现在的问题是,如果我需要用户切片中的单个属性,例如“user.image”,那么我需要为每个属性创建选择器。
  • 我也面临选择问题。我更新了问题,请检查。
  • 请考虑我的最后评论,我很乐意帮助您解决新问题。请提供一些代码。如果可以,请在此处放置新问题链接,以便我尝试帮助您。
  • 当然,这是另一个问题的链接。 stackoverflow.com/questions/57182646/…
猜你喜欢
  • 2019-01-19
  • 2019-02-11
  • 1970-01-01
  • 2019-03-02
  • 1970-01-01
  • 2020-03-05
  • 2018-08-29
  • 2019-05-05
  • 2019-06-27
相关资源
最近更新 更多