如何从ngrx存储中删除所有数据?

Posted

技术标签:

【中文标题】如何从ngrx存储中删除所有数据?【英文标题】:how to remove all data from ngrx store? 【发布时间】:2018-05-02 19:56:44 【问题描述】:

我有一个包含数据数组的状态。完成某些操作后,我需要从该数组中删除所有数据。我使用 Angular 2。

const intialState: State =    
    someData: new Array<someData>()
;

export function stateReducer(state = intialState, action: StateActionList.StateActionList) 
    switch (action.type) 
    case StateActionList.REMOVE_DATA:
            console.log(state.someData);
            return 
                ...state,
                someData: new Array<someData>()
            
        

在我的组件中,我有以下代码:

this.store.dispatch(new StateActions.RemoveData());

在状态动作中:

export const REMOVE_DATA="REMOVE_DATA";
export class RemoveData implements Action 
    readonly type=REMOVE_DATA;

该代码不会为我返回从商店清除的数组 someData。该数组包含与之前相同的数据

【问题讨论】:

问题是什么? 此代码不起作用,存储不返回已清理的数组 状态转换是否执行?新状态的 someData 属性是否有一个空数组? action 被调度时你在哪里设置 store 为空? 我不明白为什么总是使用所有这些动作创建器来使事情复杂化。只需检查 action.type=='certain action string' 和 dispatch(type:'action',payload:foo),事情就会变得非常简单 【参考方案1】:

尝试显式返回一个空数组作为新状态:

case StateActionList.REMOVE_DATA:: 
  return 
    someData: []
  ;

【讨论】:

【参考方案2】:

这看起来有点可疑

someData: new Array<someData>()

someData是变量名和类型?

见Declare an array in TypeScript

let arr1: boolean[] = [];
let arr2: boolean[] = new Array();
let arr3: boolean[] = Array();

let arr4: Array<boolean> = [];
let arr5: Array<boolean> = new Array();
let arr6: Array<boolean> = Array();

let arr7 = [] as boolean[];
let arr8 = new Array() as Array<boolean>;
let arr9 = Array() as boolean[];

let arr10 = <boolean[]> [];
let arr11 = <Array<boolean>> new Array();
let arr12 = <boolean[]> Array();

const state =    
  someData: new Array()
;

console.log('empty', state.someData)
state.someData.push('a')
console.log('contains "a"', state.someData) 

const remove = () =>  
  console.log('constians "a"', state.someData);
  return 
    ...state,
    someData: new Array()
  


const newState = remove()
console.log('empty', newState.someData)

【讨论】:

以上是关于如何从ngrx存储中删除所有数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 RxJS combineLatest 中删除瞬态事件与 NGRX 存储源 observable

如何从 ngrx 存储中获取数据并将其更新到 Observable 变量中?

如何基于 NgRX 存储数据组成 Angular 守卫

Ngrx商店刷新页面后获取用户数据

NGXS store 中的数据是如何存储的? ngxs store 的内存限制是多少? ngxs 在浏览器中存储内存在哪里?

在ngrx/effect中访问存储的正确方法