我的 NgRx 效果不起作用,没有任何反应

2023-12-28

我的 NgRx 效果有问题。

该应用程序正确地添加到商店,不幸的是我的请求效果没有执行,即在启动添加新车时,将其添加到商店,仅此而已。问题是我的效果没有控制台日志,没有由于错误的网址而导致的 http 错误,什么也没有。

我的应用程序代码:

Reducer

import { Action } from '@ngrx/store';
import * as CarActions from './car.actions';
import { Car } from 'src/models/car.model';

const initialState: Car = {
   brand: '',
   model: ''
};

export function carReducer(state: Car[] = [initialState], action: CarActions.Actions) {

    switch (action.type) {
        case CarActions.ADD_CAR:
            return [...state, action.payload];
        case CarActions.ADD_CAR_FAIL:
            return {
                ...state,
                carError: action.payload,
            };
        default:
            return state;
    }
}

State

import { Car } from './../../models/car.model';

export interface AppState {
  readonly car: Car;
}

Actions

import { Action } from '@ngrx/store';
import { Car } from './../../models/car.model';

export const ADD_CAR       = '[CAR] Add';
export const ADD_CAR_FAIL    = '[CAR] Fail';

export class AddCar implements Action {
    readonly type = ADD_CAR;

    constructor(public payload: Car) {}
}

export class AddCarFail implements Action {
    readonly type = ADD_CAR_FAIL;

    constructor(public payload: string) {}
}

export type Actions = AddCar | AddCarFail;

Effects

import { Actions, Effect, ofType } from '@ngrx/effects';
import * as CarActions from './car.actions';
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { switchMap, catchError, map, tap } from 'rxjs/operators';
import { of } from 'rxjs';

@Injectable()
export class CarEffects {
    @Effect()
    carAdd = this.actions$.pipe(
        ofType(CarActions.ADD_CAR),
        switchMap((carData: CarActions.AddCar) => {
            console.log('true');
            return this.http.post('http://myapi.com/api', { brand: carData.payload.brand, model: carData.payload.model }).pipe(map(resData => {
                localStorage.setItem('test', 'asdasdasd');
            }),
                catchError(errorRes => {
                    console.log(errorRes);
                    const errorMessage = 'An unknown error occurred!';
                    if (!errorRes.error || !errorRes.error.error) {
                        return of(new CarActions.AddCarFail(errorMessage));
                    }

                    console.log(errorRes.error.error.message);
                    return of(new CarActions.AddCarFail(errorRes.error.error.message));
                }));
        })
    );

    constructor(
        private actions$: Actions,
        private http: HttpClient) { }
}

应用程序模块.ts

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';
import { CarComponent } from './car/car.component';
import { StoreModule } from '@ngrx/store';
import { carReducer } from './car/car.reducer';
import { HttpClientModule } from '@angular/common/http';
import { StoreDevtoolsModule } from '@ngrx/store-devtools';


@NgModule({
  declarations: [
    AppComponent,
    CarComponent
  ],
  imports: [
    BrowserModule,
    StoreModule.forRoot({ car: carReducer }),
    HttpClientModule,
    StoreDevtoolsModule.instrument({
      maxAge: 5
    })
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

最重要的是,我的代码是否很好地使用了 NgRx?


您没有将 Effect 添加到您的模块中

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';
import { CarComponent } from './car/car.component';
import { StoreModule } from '@ngrx/store';
import { carReducer } from './car/car.reducer';
import { HttpClientModule } from '@angular/common/http';
import { StoreDevtoolsModule } from '@ngrx/store-devtools';
import { EffectsModule } from '@ngrx/effects';
import { CarEffects } from './car/car.effects';


@NgModule({
  declarations: [
    AppComponent,
    CarComponent
  ],
  imports: [
    BrowserModule,
    StoreModule.forRoot({ car: carReducer }),
    HttpClientModule,
    EffectsModule.forRoot([CarEffects]),
    StoreDevtoolsModule.instrument({
      maxAge: 5
    })
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我的 NgRx 效果不起作用,没有任何反应 的相关文章

随机推荐

  • 使用 SOQL 查询 Salesforce 对象列名称

    我在 Salesforce 实例和 S3 存储桶之间的 SnapLogic 集成中使用 Salesforce SOQL 管理单元 我尝试在 Salesforce SOQL 快照字段 SOQL 查询 中使用 SOQL 查询来返回对象的列名称
  • 具有整数值的 NSDictionary

    我正在开发一款与怪物有关的游戏 每个都有一个统计数据列表 这些统计数据都是整数 我可以将每个统计数据设置为它自己的变量 但我更愿意将它们保存在 NSDictionary 中 因为它们都是相关的 当我尝试更改每个统计数据的值时遇到问题 我拥有
  • 正则表达式查找字符串中的一系列大写单词

    text This is a TEXT CONTAINING UPPER CASE WORDS and lower case words This is a SECOND SENTENCE pattern A Z A Z A Z s re
  • 访问 ListView 编辑命令上的控件

    In my ListView我有一个ItemTemplate and EditItemTemplate分别看起来像这样 gt 当我单击 编辑 按钮时 它切换到EditItemTemplate查看右侧 我想预填充Textbox并选择对应的op
  • 生成 JSONObject 字符串键

    我有现有的代码使用org json JSONObject的迭代器 JSONObject obj new JSONObject obj put key1 value1 obj put key2 value2 Iterator keys obj
  • XSLT 转换未提供正确的输出

    我的 XSLT 转换遇到了一些小问题 我有以下 XSLT
  • 如何在玻璃上获得可读的文本(wpf)

    这是两个屏幕截图 白色背景上的全玻璃窗 http trotsenko com ua stackoverflow 2010 01 13 20Glass 20Window 20over 20a 20white 20background png
  • openAi-gym 名称错误

    我正在尝试在 WSL 上使用 OpenAI 著名的 Gym 模块并在 python 3 5 2 上执行代码 当我尝试运行环境时正如这里所解释的 https gym openai com docs 使用代码 import gym env gy
  • 是什么导致了这个“关闭句柄延迟读取”错误?

    我刚刚从最新的源安装了 GHC 现在我的程序给了我一条关于 关闭句柄延迟读取 的错误消息 这是什么意思 基本的惰性 I O 原语 hGetContents 产生一个String惰性地 它只根据需要从句柄中读取 以生成程序实际需要的字符串部分
  • 使用 Jquery 过滤表行

    我发现一个 Jquery 脚本可以根据输入字段进行表过滤 该脚本基本上采用过滤器 分割每个单词并使用每个单词过滤表行 因此 最后您将得到一个包含输入字段中所有单词的行列表 http www marceble com 2010 02 simp
  • Boost Graph Library - 有向图的最小生成树

    我有一个问题 要求我在 Boost Graph Library 中找到有向图的最小生成树 我的第一次尝试是使用深度优先搜索和 DFS 访问者 我的计划是忽略除树边回调之外的所有边 这是行不通的 我用下面的例子来说明原因 我的问题是我是否可以
  • 在 Scala Spark 中加入不同 Dataframe 时动态选择多个列

    我有两个 Spark 数据框df1 and df2 有没有办法在连接这两个数据帧时动态选择输出列 以下定义在内部联接的情况下输出 df1 和 df2 中的所有列 def joinDF df1 DataFrame df2 DataFrame
  • Doctrine2...最佳补水模式?

    我正在设计一个房间预订系统 它有九个实体 它们都相互关联 在此特定实例中 我从实体中检索 10 30 行entry其中有 25 个属性 每个条目都有一个room其中有 10 个属性 我需要所有的条目信息以及entry gt room gt
  • 来自 Maven 的 Java OpenCV

    有没有办法从存储库获取 OpenCV 我应该添加到哪个工件pom xml 我找到的每个教程都是从 14 年开始的 似乎有些东西发生了变化 他们说它还没有出现在官方 Maven 存储库中 但我找到了条目
  • 创建使用 .NET 4.0 的应用程序池

    我使用以下代码创建应用程序池 var metabasePath string Format IIS 0 W3SVC AppPools serverName DirectoryEntry newpool DirectoryEntry appp
  • 上传到谷歌云存储时转换音频文件

    我有一个应用程序 用户可以在其中录制音频 然后相互 发送 我写的是 发送 因为实际上文件存储在服务器上 并且只是在收件人想要收听时提供给他们 我的问题是 我需要将录音 当前为 caf 重新格式化为 mp3 这样它们就会更小 这样我就可以用我
  • MySQL 的 C++ 连接器

    EDITED 我的问题是这篇文章底部的错误 这是我的附加包含目录 C Program Files boost C Program Files MySQL MySQL Connector C 1 1 3 include C Program F
  • 对未使用的变量使用占位符时出现 MatchError

    使用 Scala 2 13 x 我得到scala MatchError null当我对未使用的变量使用占位符时 scala gt object Test val Any null object Test scala gt Test scal
  • 如何在 Linux 中获取 .Net 文件的 AssemblyVersion

    有没有办法在不使用 mono 的情况下在 Linux 中获取 Net 可执行文件的 AssemblyVersion 我想要的是一个脚本或命令 可以让我在 Linux 机器上获取 AssemblyVersion 我试过 strings fil
  • 我的 NgRx 效果不起作用,没有任何反应

    我的 NgRx 效果有问题 该应用程序正确地添加到商店 不幸的是我的请求效果没有执行 即在启动添加新车时 将其添加到商店 仅此而已 问题是我的效果没有控制台日志 没有由于错误的网址而导致的 http 错误 什么也没有 我的应用程序代码 Re