如何仅从商店获得最后值?

发布于 2025-01-27 10:53:18 字数 1494 浏览 2 评论 0原文

这是我的选择器的使用: -

private loadTree() {

    this.loading = true;

    this.store.select(transitionListSelector).pipe().subscribe(data => {
      console.log(data);
      data.map(item => {
        console.log(item);
        this.treeItems.push({ label: item.name, leaf: false, ...item });
      })
      this.loading = false;

    });

  }

这是我的选择器: -

export const transitionListSelector = createSelector(
    topicModuleSelector,
    (s) => s.transitionListState.transition
);

这是我的还原器: -

export const transitionListReducer = createReducer(
    initialTopicModuleState.transitionListState,
    on(actions.listTransitionAction, (s) => {
        return { ...s, transition: [] };
    }),
    on(actions.listTransitionSuccessAction, (s, { transition }) => {
        return { ...s, transition };
    })
);

export function transitionListReducerMap(s: any, a: Action): any {
    return transitionListReducer(s, a);
}

这是我的主题模块化: -

export interface TopicModuleState {
        
     transitionListState: TransitionListState;
    
    } 
export interface TransitionListState {
    transition: Transition[];
}

export const initialTopicModuleState: TopicModuleState = {
    
    transitionListState: {
        transition: []
    }
};

在此处输入图像描述

如您在控制台中所见,我将获得2个结果,第一个是空数组,第二个是实际结果。我只需要实际的结果。

This is use of my Selector:-

private loadTree() {

    this.loading = true;

    this.store.select(transitionListSelector).pipe().subscribe(data => {
      console.log(data);
      data.map(item => {
        console.log(item);
        this.treeItems.push({ label: item.name, leaf: false, ...item });
      })
      this.loading = false;

    });

  }

This is my selector:-

export const transitionListSelector = createSelector(
    topicModuleSelector,
    (s) => s.transitionListState.transition
);

This is my reducer:-

export const transitionListReducer = createReducer(
    initialTopicModuleState.transitionListState,
    on(actions.listTransitionAction, (s) => {
        return { ...s, transition: [] };
    }),
    on(actions.listTransitionSuccessAction, (s, { transition }) => {
        return { ...s, transition };
    })
);

export function transitionListReducerMap(s: any, a: Action): any {
    return transitionListReducer(s, a);
}

This is my TopicModuleState :-

export interface TopicModuleState {
        
     transitionListState: TransitionListState;
    
    } 
export interface TransitionListState {
    transition: Transition[];
}

export const initialTopicModuleState: TopicModuleState = {
    
    transitionListState: {
        transition: []
    }
};

enter image description here

As You see in console I am getting 2 result first one is empty array and second is actual result. I want only Actual result.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我只土不豪 2025-02-03 10:53:18

初始化商店时,您的选择器会获取初始值。如果跳过初始值,则可以使用跳过操作员。

this.store.select(transitionListSelector).pipe(skip(1))

而且,我认为当列表TransitionAction派遣时,您不应该设置一个空数组。创建ListTransitionActionFail操作,并使用此操作设置一个空数组。然后将加载状态移至NGRX状态。

When the store is initialized, your selectors get initial values. If you skip the initial value, you can use the skip operator.

this.store.select(transitionListSelector).pipe(skip(1))

And, I think you shouldn't set an empty array when your listTransitionAction is dispatched. Create listTransitionActionFail action and use this action to set an empty array. Then move your loading state to ngrx state.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文