You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NgRx中为分发的Action传递参数?

问题:如何在NgRx组件中分发UpdateData Action时传递参数?

现有代码

Action 定义

export enum ActionTypes {
  UpdateData = '[Data] Update Data',
}

export class UpdateData implements Action {
  readonly type = ActionTypes.UpdateData;

  constructor(public payload: any) {}
}

Reducer 实现

export interface AppState {
  data: any;
}

const initialState: AppState = {
  data: null,
};

export function appReducer(state = initialState, action: Actions): AppState {
  switch (action.type) {
    case ActionTypes.UpdateData:
      return {
        ...state,
        data: action.payload,
      };
    default:
      return state;
  }
}

组件代码

import { Component } from '@angular/core';
import { Store } from '@ngrx/store';
import { AppState } from './app.state';
import { UpdateData } from './store/actions';

@Component({
  selector: 'app-my-component',
  template: `
    <button (click)="updateData()">Update Data</button>
  `,
})
export class MyComponent {
  constructor(private store: Store<AppState>) {}

  updateData() {
    // 如何在此处为Action传递参数?
    this.store.dispatch(new UpdateData(/* 此处应传入什么? */));
  }
}

解决方案

你的UpdateData Action已经通过构造函数接收payload参数,直接在分发时传入需要更新的数据即可,支持字符串、对象等任意类型。

示例1:传递字符串参数

修改组件的updateData方法:

updateData() {
  this.store.dispatch(new UpdateData('更新后的字符串内容'));
}

示例2:传递对象参数

如果需要更新结构化数据:

updateData() {
  const updatedData = {
    id: 1,
    title: '用户信息',
    content: '这是新的用户数据'
  };
  this.store.dispatch(new UpdateData(updatedData));
}

类型安全优化(可选)

避免使用any类型,给数据和Action指定具体类型,提升代码可维护性:

  1. 定义数据类型接口:
export interface UserData {
  id?: number;
  title?: string;
  content?: string;
}
  1. 更新Action定义:
export class UpdateData implements Action {
  readonly type = ActionTypes.UpdateData;

  constructor(public payload: UserData) {} // 替换any为UserData
}
  1. 更新AppState:
export interface AppState {
  data: UserData | null; // 替换any为UserData | null
}

内容的提问来源于stack exchange,提问作者Huzaifah Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 05:16:28