AngularNGXS不更新选择器,除非状态中的所选数据发生更改。
创始人
2024-10-28 18:31:22
0

使用memoization函数来保存上一次选择器的结果,并在数据变化时重新计算选择器。

示例代码:

import { createSelector } from '@ngxs/store';

export class MyStateModel {
  data: string[];
  selectedId: number;
}

export class MyState {
  @Selector()
  static selectedData(state: MyStateModel) {
    return state.data.find(d => d.id === state.selectedId);
  }
  
  @Selector()
  static otherData(state: MyStateModel) {
    const selectedData = MyState.selectedData(state); // 通过调用选择器获取所选数据
    // 处理其他数据
    return processedData;
  }

  @Action(UpdateSelection)
  updateSelection(ctx: StateContext, { selectionId }: UpdateSelection) {
    const state = ctx.getState();
    if (state.selectedId !== selectionId) {
      ctx.patchState({ selectedId: selectionId });
      MyState.otherData.release(); // 释放先前的memoization缓存
    }
  }
}

export function memoize(fn: (arg: T) => U): (arg: T) => U {
  let lastArg: T;
  let lastResult: U;
  return arg => {
    if (arg === lastArg) {
      return lastResult;
    }
    lastArg = arg;
    lastResult = fn(arg);
    return lastResult;
  };
}

// 创建一个选择器的memoize包装器
function memoizeSelector(selector: (arg: T) => U) {
  const memoizedSelector = createSelector(selector);
  return memoize(memoizedSelector);
}

// 在组件中使用memoizeSelector
export class MyComponent {
  selectedData$ = memoizeSelector(MyState.selectedData);
  otherData$ = memoizeSelector(MyState.otherData);

  constructor(private store: Store) {}

  updateSelection(id: number) {
    this.store.dispatch(new UpdateSelection(id));
  }
}

相关内容

热门资讯

热点推荐!wopoker分析器... 热点推荐!wopoker分析器下载,wepok软件透明挂,透视教程(竟然是有挂);小薇(透视辅助)致...
透视讲解!wepoker底牌透... 透视讲解!wepoker底牌透视脚本怎样安装,友间十三道有什么窍门,AA德州教程(有挂教程);实战中...
专业讨论!德扑ai智能机器人代... 专业讨论!德扑ai智能机器人代理,wepoke辅助机器人,AA德州教程(原来有挂)是一款可以让一直输...
每日必看!cloudpoker... 每日必看!cloudpoker云扑克,wpk真的有外挂,专业教程(原来是真的有挂)是一款可以让一直输...
透视教程!wpk透视辅助靠谱吗... 透视教程!wpk透视辅助靠谱吗,衢州都莱辅助软件,透明教程(有挂技巧);1.衢州都莱辅助软件 ai辅...
透视线上!wepoker辅助器... 透视线上!wepoker辅助器是真的的吗,闽游13水辅助,2025新版教程(有挂神器)这是由厦门游乐...
新手必备!德扑之星操作,德扑a... 新手必备!德扑之星操作,德扑ai助手,AA德州教程(原来真的是有挂)1)德扑ai助手辅助挂:进一步探...
透视工具!wpk脚本下载,多乐... 透视工具!wpk脚本下载,多乐辅助下载够机,必胜教程(有挂辅助);《WPK辅助透视》‌:支持手机实时...
实测发现!德州辅助,aapok... 实测发现!德州辅助,aapoker发牌机制,线上教程(原先真的是有挂),您好,aapoker发牌机制...
透视辅助!wepoker辅助器... 透视辅助!wepoker辅助器是真的的吗,0759湛江吴川三脚鸡辅助,详细教程(有挂攻略);玩家必备...