0
  • 减速器/index.ts

    
    export interface State {
      questionnotifications: QuestionNotification;
    }
    
    export const reducers = {
      questionnotifications: fromNotification.questionreducer,
    };
    
    
    export const getQuestionNotifications = (state: State) => state.questionnotifications;```
    
  • 动作/通知.ts

    import {Action} from '@ngrx/store';
    
    export const QUESTIONADD = '[Question] add';
    export const QUESTIONREMOVE = '[Question] remove';
    
    
    
    export class QuestionNotificationAdd implements Action {
      type = QUESTIONADD;
    
      constructor(public payload: NewQuestionNotification[]) {
      }
    }
    
    
    export class QuestionNotificationRemove extends QuestionNotificationAdd {
      type = QUESTIONREMOVE;
      /* constructor(public payload: NewQuestionNotification[]) {}*/
    }```
    
  • 模型/通知.ts

export interface QuestionNotification {
   doctor_id_c: string;
   pat_image: string;
   pat_name: string;
   patient_id_c: string;
   q_id: number;

 }

 export class NewQuestionNotification implements QuestionNotification {
   doctor_id_c: string;
   pat_image: string;
   pat_name: string;
   patient_id_c: string;
   q_id: number;

   constructor(doctor_id_c: string, pat_image: string, pat_name: string, patient_id_c: string, q_id: number) {
     this.doctor_id_c = doctor_id_c;
     this.pat_image = pat_image;
     this.pat_name = pat_name;
     this.patient_id_c = patient_id_c;
     this.q_id = q_id;
   }}
  • 减速器/notifications.ts

  export function questionreducer(state = [], action: notification.QuestionNotificationAdd) {
    switch (action.type) {
      case notification.QUESTIONADD:
        return state.concat(action.payload).filter((obj, pos, arr) => {
          return arr.map(mapObj => mapObj['q_id']).indexOf(obj['q_id']) === pos;
        });

      case notification.QUESTIONREMOVE:
        console.log('in remove question notification');
        console.log(action.payload[0].q_id);
        return state.filter(function (el) {
          return el.q_id != action.payload[0].q_id;
        });

      default:
        return state;
    }
  }

我们在 Angular 6 中生成通知,浏览器正在接收 fcm 通知,与我们尝试以 redux 状态存储的通知负载数据相同,但是在显示 redux 存储的数据时我们遇到了问题,因为负载数据没有与 redux 状态数据连接.

请告知我们哪里出错了。

4

1 回答 1

0

我们先让代码更具可读性如何?

     case notification.QUESTIONADD:
        const withDuplicates = state.concat(action.payload)
        const ids = withDuplicates.map(n => n.q_id)
        const withoutDuplicates = withDuplicates.filter((o, i) => ids.indexOf(o.q_id) === i)
        return withoutDuplicates

于 2019-11-11T12:14:54.250 回答