【问题标题】:how to remove all data from ngrx store?如何从ngrx存储中删除所有数据?
【发布时间】: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}),事情就会变得非常简单

标签: javascript angular rxjs


【解决方案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)

    【讨论】:

      猜你喜欢
      • 2018-12-13
      • 1970-01-01
      • 2018-04-08
      • 2011-06-04
      • 1970-01-01
      • 2010-11-03
      • 2010-11-06
      • 2015-09-18
      • 1970-01-01
      相关资源
      最近更新 更多