效果不触发任何动作?

Posted

技术标签:

【中文标题】效果不触发任何动作?【英文标题】:Effects not triggering any actions? 【发布时间】:2020-11-14 05:13:12 【问题描述】:

我对 NGRx 很陌生,我正在尝试在我的小项目上使用效果,因为日期使用外部数据我决定将它放在效果中,所以控制台没有显示任何错误,程序看到除了使用的动作之外的所有动作在效果(CountUpdatedAtAction)中,我使用的是 redux devtools,当我更新计数时没有触发 updatedAt 动作,所有其他动作都按预期工作

count.effects.ts

import  Injectable  from '@angular/core';
import  Actions, Effect, ofType  from '@ngrx/effects';
import 
  countActionsType,
  CountUpdatedAtAction,
 from './reducers/count/count.actions';
import  map  from 'rxjs/operators';

@Injectable()
export class AppEffects 
  constructor(private actions$: Actions) 

  @Effect()
  updatedAt$() 
    return this.actions$.pipe(
      ofType(
        countActionsType.increase,
        countActionsType.decrease,
        countActionsType.clear,
        countActionsType.updatedAt
      ),
      map(() => 
        return new CountUpdatedAtAction(
          updatedAt: Date.now(),
        );
      )
    );
  

count.reducer.ts

import  CountActions, countActionsType  from './count.actions';

export const COUNT_NODE = 'count';

export interface ICountState 
  count: number;
  updatedAt: number;


const initialState: ICountState = 
  count: 0,
  updatedAt: Date.now(),
;

export const countReducer = (state = initialState, actions: CountActions) => 
  switch (actions.type) 
    case countActionsType.increase:
      return 
        ...state,
        count: state.count + 1,
      ;
    case countActionsType.decrease:
      return 
        ...state,
        count: state.count - 1,
      ;
    case countActionsType.clear:
      return 
        ...state,
        count: 0,
      ;
    case countActionsType.updatedAt:
      return 
        ...state,
        updatedAt: actions.payload.updatedAt,
      ;
    default:
      return state;
  
;

count.actions.ts

import  Action  from '@ngrx/store';

export enum countActionsType 
  increase = '[COUNT] increase',
  decrease = '[COUNT] decrease',
  clear = '[COUNT] clear',
  updatedAt = '[COUNT] updated at',


export class CountIncreaseAction implements Action 
  readonly type = countActionsType.increase;


export class CountDecreaseAction implements Action 
  readonly type = countActionsType.decrease;


export class CountClearAction implements Action 
  readonly type = countActionsType.clear;


export class CountUpdatedAtAction implements Action 
  readonly type = countActionsType.updatedAt;

  constructor(
    public payload: 
      updatedAt: number;
    
  ) 


export type CountActions =
  | CountIncreaseAction
  | CountDecreaseAction
  | CountClearAction
  | CountUpdatedAtAction;

count.components.ts

import  Component  from '@angular/core';
import  Store, select  from '@ngrx/store';
import  ICountState  from './reducers/count/count.reducer';
import  Observable  from 'rxjs';
import  map  from 'rxjs/operators';
import  selectCount, selectUpdatedAt  from './reducers/count/count.selectors';
import 
  CountIncreaseAction,
  CountDecreaseAction,
  CountClearAction,
 from './reducers/count/count.actions';

@Component(
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss'],
)
export class AppComponent 
  public count$: Observable<number> = this.store$.pipe(select(selectCount));
  public isButtonDisabled$: Observable<boolean> = this.count$.pipe(
    map((count) => count <= 0)
  );
  public updatedAt$: Observable<number> = this.store$.pipe(
    select(selectUpdatedAt)
  );

  constructor(private store$: Store<ICountState>) 

  increase() 
    this.store$.dispatch(new CountIncreaseAction());
  

  decrease() 
    this.store$.dispatch(new CountDecreaseAction());
  

  clear() 
    this.store$.dispatch(new CountClearAction());
  

【问题讨论】:

【参考方案1】:

您必须注册您的效果,请参阅文档https://ngrx.io/guide/effects#registering-root-effects。

如果不能解决,请提供一个复制品。

编辑:

您必须将效果添加到效果模块:

    EffectsModule.forRoot([AppEffects]),

【讨论】:

EffectsModule.forRoot([]) 它在 app.module.ts 中,我修改为 EffectsModule.forRoot([AppEffects]),现在应用程序崩溃了,没有任何工作!应该这样还是? link to GitHub Repo请帮帮我! 我现在添加了应用程序崩溃并且无法执行任何操作 现在是无限循环

以上是关于效果不触发任何动作?的主要内容,如果未能解决你的问题,请参考以下文章

披露指示器未触发辅助动作序列

是否有任何 JavaScript/jQuery 插件可以让我在播放歌曲达到特定播放时间时触发动作?

jQuery Mobile:渲染新元素但不触发动作

Debezium 心跳动作未触发

unity动作技能绑定播放

UIPanGestureRecognizer 不触发动作