ngrx 订阅存储不会在状态更改时更新 Angular 5

2023-12-23

我正在构建一个应用程序,它将城市名称发送到 api 端点并返回该城市的天气。

它使用两个操作,一个将更新城市,使用名称作为有效负载,第二个操作加载返回的新数组以更新状态

该效果使用 switchMap 映射 api 调用然后返回结果。

用于显示存储结果的选择函数仅检测页面加载启动时的存储更新(空数组)以及第一组结果

并且在之后没有检测到我的商店内的变化

页面显示数组中的第一个对象,但状态中有 3 个对象。

应用程序状态:

import { Cities } from '../../model/weather';

//Holds data for city weather
export interface AppState {
  readonly cityWeather: Cities[];
}

在应用程序模块中:

import {cityWeather} from './weather/store/reducers/weather';

    export const reducers = {
        cityWeather
     };

 StoreModule.forRoot(reducers, {initialState: undefined})

减速机:

export function cityWeather(state:Cities[] = [], action:Action) : any {
    switch (action.type)  {
        case LOAD_CITIES_ACTION:
        return  handleLoadCitiesAction(state, action);
        case UPDATE_CITIES_ACTION:
        console.log(state)
        return handleUpdateCitiesAction(state, action);
    default:
        return state;
    }

}
function  handleUpdateCitiesAction(state, action):Cities[]{
    //Must always return the state
    console.log(state, action.payload)
        return state;
}

function  handleLoadCitiesAction(state, action):Cities[]{
    //Return the payload that holds the new array for cities
    console.log(action.payload)
    return action.payload;
}

@Effects

import { Injectable } from '@angular/core';
import {Actions, Effect} from "@ngrx/effects";
import 'rxjs/add/operator/switchMap';
import { WeatherService } from '../../weather.service';
import { UpdateCitiesAction, UPDATE_CITIES_ACTION, LoadCitiesAction } from '../actions/weather';
import {Observable} from "rxjs/Observable";
import {Action} from "@ngrx/store";

@Injectable()
export class WeatherEffects {

  constructor(private actions$: Actions, private weatherService: WeatherService) {

  }

  @Effect() cityWeather$: Observable<Action> = this.actions$
      .ofType<UpdateCitiesAction>(UPDATE_CITIES_ACTION)
      .switchMap(action => {
          console.log(action)
          return this.weatherService.searchWeatherForCity(action.payload)
        })
    .map(cities =>  {
        console.log(cities);
        return new LoadCitiesAction(cities)
    });
}

这就是我订阅商店的方式,出于测试目的,我采用两种方式:

@Component({
  selector: 'app-weather',
  template: `
  <app-search (onSearchCity)="citySearch($event)"></app-search>
  <app-results [cities]="cities$ | async "></app-results>  `
})

this.cities$ = this.store.select(state => state.city 天气);

this.store.select(state => state.cityWeather)
.subscribe((data)=>{
  console.log(data)
})

我一发帖就解决了,看来我得复制一份:

function  handleLoadCitiesAction(state, action):Cities[]{
    let newState = action.payload.slice(); 
    return newState;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ngrx 订阅存储不会在状态更改时更新 Angular 5 的相关文章

随机推荐

  • 逗号附近的语法不正确

    这是我尝试从会话中获取多个值时的 ASPX 代码片段 我收到错误 逗号附近的语法不正确 在代码片段中标记了该行 SqlCommand cmd1 new SqlCommand select plugin id from profiles pl
  • 根据 PEP257 自动检查文档字符串样式的工具[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 类似的工具pep8 http pypi python org pypi pep8可以检查源代码样式 但他
  • Kotlin 的构造函数重载

    因为我有一个User类有 2 个参数 first name last name 所以我的 kotlin 类是 data class User val first name String val last name String 现在我想要一
  • 高频调用 std::async 可以吗?

    我写了一个小程序 使用std async对于并行性 它让我崩溃了 我很确定有更好的方法可以做到这一点 但现在我只想知道这里发生了什么 我不会发布确切的代码 因为我认为它不会真正产生影响 它基本上看起来像这样 while 1 std vect
  • 如果文件已存在于 pyspark 中,如何覆盖 rdd saveAsPickleFile(path)?

    如何覆盖 当我们节省时间时 RDD 输出对象任何现有路径 test1 975078 56691 2 000 20171001 926 570 1322 975078 42993 1 690 20171001 926 570 1322 975
  • 询问如何在 R 中使用 ggplot 制作世界热图?

    我想制作特定疾病的世界热图 该数据集包含国家 地区列表 纬度 经度和每个国家 地区的案例 数据可用here https drive google com file d 1 EqMEZFHlujsg40gzEo83dN1zY9d9gAJ vi
  • C 中整数表达式的大小

    令我惊讶的是 Xcode 编译 C gnu11 include
  • Magento EAV:如何硬删除属性值?

    在进入细节之前 让我们先问清楚这个问题 有没有办法hard删除属性value来自产品 By hard我的意思是 从数据库中删除该行 而不仅仅是将值设置为 null 或空 现在 详细信息 我目前在 Magento 上遇到一个问题 我商店中的许
  • 有没有一种方法可以在没有 xml 或属性文件的情况下在应用程序上下文中存储 java 变量/对象

    我想在 Spring Boot 应用程序的应用程序上下文中存储特定变量 字符串或对象 但我不想使用 xml 或属性文件来存储它 将有一个函数将数据存储在应用程序上下文中 我应该能够检索它 修改它 删除它或添加更多数据 基本上我想在初始化完成
  • 耦合常微分方程的龙格库塔

    我正在 Octave 中构建一个函数来解决N耦合常微分方程类型 dx dt F x y z t dy dt G x y z t dz dt H x y z t 使用这三种方法中的任何一种 Euler Heun 和 Runge Kutta 4
  • 如何在电子表格的 Google Apps 脚本中使用数组作为自定义函数的参数

    我正在尝试使用脚本编辑器在我的谷歌电子表格中创建自定义函数 我似乎无法允许用户为函数提供一个数组作为参数 当我像这样进行硬编码时 我的脚本可以工作 var values SpreadsheetApp getActiveSheet getRa
  • Plotly:如何自定义图例?

    我已经自定义了使用plotly绘制的数据点的颜色 数据点的颜色是根据与其关联的标签指定的 不过设置之后legend True所有三种颜色 在字典中定义 都不会显示在图中 我想 a rgb 147 112 219 the actual col
  • iOS PhoneGap 构建失败

    我是新来的PhoneGap适用于 iOS 和 Xcode 我的应用程序在 Android 手机上运行良好 但遇到了问题 我能够在 iOS 模拟器中构建并运行该应用程序 但是当我将其存档以在设备上进行测试时 出现以下错误 我到处搜索但找不到有
  • JQuery Mobile,整个网站的一个页脚片段

    I m not询问如何获得固定页脚 我有一个多页和单页的结构 我想知道如何在整个网站中仅使用一个 html 片段 我真的在寻找一种解决方案 因为我想仅在一个位置编辑页脚并在所有页面中查看修改 Thanks 编辑 我正在开发一个用 Phone
  • 为什么 VisualVM 探查器中没有显示所有方法?

    我在用VisualVM看看我的应用程序在哪里慢 但它并没有显示所有方法 可能没有显示所有延迟应用程序的方法 我有一个实时应用程序 声音处理 并且有几百微秒的时间不足 有没有可能VisualVM隐藏本身速度很快的方法 UPDATE 1 我通过
  • 使用 PK 反馈循环复制行

    鉴于以下情况 表1 Id Field1 Field2 NULL 1 2 NULL 3 4 我想将 Field1 和 Field2 的值插入到另一个表 Table2 中 Table2 有一个自增整数主键 我想从表 2 中检索新的 PK 并更新
  • 由于访问控制列表,SSRS 401.3 错误访问被拒绝

    卸载 Oracle 10 客户端 安全补丁后 不知道是什么触发了它 我在用户访问我们的 SSRS 测试服务器时遇到了问题 首先发生的事情是 SQL 服务和 SSRS 服务拒绝在 NT AUTHORITY SYSTEM 下启动 当我将其更改为
  • 无法使用 dotnet CLI 和 nuspec 文件打包 NuGet 包

    我有几个项目正在从 NET Framework 4 7 迁移到 NET Standard 2 0 结果 我正在尝试使用dotnet pack命令来创建我的 NuGet 包 同时使用我的nuspec带有令牌的文件 我有几个自定义构建脚本可以为
  • 匹配引用的 csv 中的未转义引号

    我查看了几篇具有类似标题的 Stack Overflow 帖子 但没有一个已接受的答案对我有用 我有一个 CSV 文件 其中数据的每个 单元格 均由逗号分隔并被引用 包括数字 每行以换行符结束 一些文本 单元格 中有引号 我想使用正则表达式
  • ngrx 订阅存储不会在状态更改时更新 Angular 5

    我正在构建一个应用程序 它将城市名称发送到 api 端点并返回该城市的天气 它使用两个操作 一个将更新城市 使用名称作为有效负载 第二个操作加载返回的新数组以更新状态 该效果使用 switchMap 映射 api 调用然后返回结果 用于显示