ngrx/store 不显示表单的更新值

2024-01-14

我需要通过表单输入 2 个输入值,以兆字节为单位显示存储空间的使用情况(已使用空间和剩余空间),并显示来自 ngrx/Store 的输入值。每次提交表单时,都会显示新值并更新旧值。问题是 UI 始终显示(used_space 和剩余空间)的默认值,并且我不知道我的架构是否正确,因为我是 ngrx/store 的新手。

模型(usage.model.ts):

   export interface Usage {
      used_space: number;
      remaining_space: number;
    }

操作(usage.actions.ts):

export const EDIT_USAGE  = '[Usage] Edit';
...
export class EditUsage implements Action {
  readonly type = EDIT_USAGE
  constructor(public payload: Usage) {}
}
...
export type All = Reset | EditUsage;

减速器(usage.reducer.ts): 导出类型操作=UsageActions.All;

/// Default app state
const defaultState: Usage = {
  used_space: 2,
  remaining_space: 3
}

/// Helper function to create new state object
const newState = (state, newData) => {
  return Object.assign({}, state, newData)
}

export function usageReducer(state: Usage = defaultState, action: Action) {
  switch(action.type) {
    case UsageActions.EDIT_USAGE:
      // return [...state, action.payload];
      return newState(state, { Usage: action.payload });
    case UsageActions.RESET:
      return defaultState;
    default:
      return state;
  }
}

在 app.component.ts 中:

  usage: Observable<Usage>

  constructor(private store: Store<AppState>) {
    this.usage = this.store.select('usage')
  }

  editUsage(used_space,remaining_space) {
    this.store.dispatch(new UsageActions.EditUsage({used_space:used_space , remaining_space:remaining_space}) )
  }

在app.component.html中:

<input type="text"  #used_space>
<input type="text"  #remaining_space>
<button (click)="editUsage(used_space.value,remaining_space.value)" >Edit Space</button>

<div *ngIf="usage | async as u">
  <h2>Used space: {{ u.used_space }}</h2>
  <h2>remaining space: {{ u.remaining_space }}</h2>
</div>

我没有看到任何结果,我不知道出了什么问题。


问题出在你的reducer:

switch(action.type) {
  case UsageActions.EDIT_USAGE:
    return newState(state, { Usage: action.payload }); <<--------
}

你正在通过之前的状态并且new object with usage as a property. What Object.assign作用是:创建一个新对象,将以前的状态附加到它,附加一个全新的属性Usage并为其添加新的存储值。这是新创建的对象的视图:

你可以通过以下方法解决这个问题payload直接地:

switch(action.type) {
  case UsageActions.EDIT_USAGE:
    return newState(state, action.payload);
}

工作演示 https://stackblitz.com/edit/angular-vrq9wn

另外,只要您在减速器中更新整个对象,我相信您不需要Object.assign()也。可以直接返回action.payload因为这是新的状态。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ngrx/store 不显示表单的更新值 的相关文章

随机推荐

  • Git:执行提交后,显示上次推送到每个远程的日期

    我想要一个简单的 git 提交后操作 打印上次将更改推送到每个远程的日期 这样做的动机是简单地提醒您的存储库可能会变得不同步 或者很好地提醒您将更改备份到远程裸存储库 这是否存在 如果没有关于如何做到这一点的快速建议 如果它不存在 我最初的
  • aurelia 中的自定义属性不起作用?

    我正在学习 Aurelia 的工作原理 并且正在尝试让一个简单的自定义属性正常工作 它所做的只是根据某些值的变化来改变 div 文本的颜色 我有一个 div 其中包含 high bind changeColor 在我的属性中我有 impor
  • 适合简单游戏的易于使用的 3D 图形引擎? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 Entity Framework 5 Code First 迁移中重命名数据库列而不丢失数据?

    我使用 EF 5 0 Code First 迁移成功运行了默认的 ASP NET MVC 4 模板 但是 当我更新模型属性名称时 EF 5 0 会删除相应的表列数据 是否可以在不以自动方式删除数据的情况下重命名表列 手动编辑迁移的Up和Do
  • 如何使用 EF6 删除 1,000 行?

    我正在使用实体框架 6 我有一个包含测试信息的表 称为 测试 我正在删除 通过首先获取测试列表 执行以下操作从该表中获取行 每个删除然后提交 var testList testService GetTests 1 userId ToList
  • 如何在 Numba 中使用指针包装 CFFI 函数

    这应该是一项简单的任务 但我找不到如何将标量值的指针传递给 Numba 函数内的 CFFI 函数的方法 使用以下命令将指针传递给数组可以毫无问题ffi from buffer 示例函数 import cffi ffi cffi FFI de
  • 将两个字节读入一个整数?

    我有一个byte 我已经从文件中读取了 并且我想要得到一个int从其中的两个字节 这是一个例子 byte bytes new byte byte 0x00 byte 0x2F byte 0x01 byte 0x10 byte 0x6F in
  • 正在使用的 Azure 应用服务部署文件

    在我的项目中 我们使用 Azure App Service Deploy 任务来部署我们的 webdeploy 包 我注意到有时在部署时会出现文件使用错误 即使已设置 使应用程序离线 选项也是如此 解决这个问题的最佳方法是什么 这是错误 2
  • 为什么硬件加速在我的视图上不起作用?

    我在用着Facebook 的 Rebound 库 http facebook github io rebound 复制聊天头实现中看到的弹性动画 问题是 大多数时候动画都会断断续续 几张图片会更好地解释这一点 这是黄油般流畅的聊天头动画 这
  • 为 AWS Device Farm 构建 XCTest UI 测试

    我正在尝试设置我们的 iOS XCUITests 以在 AWS Device Farm 上运行 但似乎无论我如何构建和上传它们 测试都不会运行 它们在 XCode 本地运行时执行并通过 但不在 AWS Device Farm 上运行 我已经
  • 配置 Quartz.Net 使用 NLog 写入单独的文件

    这是我的 nlog 配置 我想要实现的是将 Quartz 日志放在单独的文件中 但检查日志文件夹我只发现调度程序日志文件
  • 如何强制对 xml 文件进行配置转换?

    我刚刚安装了配置转换 https marketplace visualstudio com items itemName GolanAvraham ConfigurationTransform对于VS2017 希望能转换一些XML文件 不幸
  • 在 XCode 4.2 空应用程序模板中使用 Interface Builder 将 tabbarcontroller 添加到 AppDelegate 的步骤

    当我被困住的时候在这个问题上 https stackoverflow com questions 8200059 tab bar is shifted down outside the borders of the simulator我找不
  • Python:将 1,000,000 个整数写入文件

    使用 Python 将 1 000 000 个整数 0 1 2 写入文件而无需压缩等的最紧凑方法是什么 我的答案是 使用 struct 模块 1 000 000 3 字节 但面试官似乎期望另一个答案 编辑 从 1 到 1 000 000 的
  • 带变换的 R lm() 公式的格式

    我不太清楚如何在一行中执行以下操作 data attenu x temp attenu accel 1 4 y temp log attenu dist best line lm y temp x temp 由于上述工作有效 我认为我可以执
  • 将 Arduino RGB LED 从一种颜色渐变为另一种颜色?

    目前 我已成功让 LED 灯循环显示我选择的八种颜色 一切都工作正常 除了我想要一种更自然的感觉 并且想要从一种颜色褪色 过渡到下一种颜色 而不是让它们互相替换 到目前为止 这是我的代码 int redPin 11 int greenPin
  • 子元素自动宽度(大于父元素)

    我有一个ul等距导航菜单inline block每个元素都有一个子菜单 问题是我无法让子菜单的宽度适应子元素的长度 它继承了父级的宽度 我可以设置固定宽度 但由于每个子菜单都有不同长度的不同链接 因此我理想地希望每个子菜单都具有自动宽度并与
  • Liquibase 不会使用 MySQL 回滚失败的变更集

    我使用 Liquibase 3 4 1 和 MySQL56 并通过 Spring Boot 运行 Liquibase 我有一个变更集 其中包括向现有表添加一列 新的column has valueComputed属性与一个简单的选择 当我在
  • 请求 EMV 卡的 GPO 命令时出现解析器错误

    我在使用 VISA 卡的 GET PROCESSING OPTIONS GPO 命令时遇到一些问题 以下是我对 VISA 应用程序的 SELECT 命令的响应 6F408407A0000000031010A535500A5649534120
  • ngrx/store 不显示表单的更新值

    我需要通过表单输入 2 个输入值 以兆字节为单位显示存储空间的使用情况 已使用空间和剩余空间 并显示来自 ngrx Store 的输入值 每次提交表单时 都会显示新值并更新旧值 问题是 UI 始终显示 used space 和剩余空间 的默