导入不使用react和webpack的单个rxjs操作符
我正在使用react应用程序的redux observable和捆绑的webpack 当我包含rxjs中的特定操作符时,比如导入不使用react和webpack的单个rxjs操作符,rxjs,rxjs5,redux-observable,Rxjs,Rxjs5,Redux Observable,我正在使用react应用程序的redux observable和捆绑的webpack 当我包含rxjs中的特定操作符时,比如 import 'rxjs/add/operator/mapTo'; 它不工作并抛出错误 TypeError: action$.ofType(...).mapTo is not a function. 但当我包含完整的rxjs库时,它就可以工作了 import 'rxjs'; 导入特定运算符时,我的js包确实包含mapTo代码,但这些方法没有包含在Observabl
import 'rxjs/add/operator/mapTo';
它不工作并抛出错误
TypeError: action$.ofType(...).mapTo is not a function.
但当我包含完整的rxjs库时,它就可以工作了
import 'rxjs';
导入特定运算符时,我的js包确实包含mapTo代码,但这些方法没有包含在Observable prototype中。我正在使用网页包进行捆绑。我们是否需要为在网页包中导入特定操作员做任何特殊的操作
代码:
import { combineEpics } from 'redux-observable';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import 'rxjs/add/operator/mergeMap';
import 'rxjs/add/operator/mapTo';
const PING = 'PING';
const PONG = 'PONG';
const pingEpic = action$ => {
const obser = action$.ofType(PING);
return obser.mapTo({ type: PONG });
}
export const epic$ = new BehaviorSubject(combineEpics(pingEpic));
export const createRootEpic = (action$, store) =>
epic$.mergeMap(epic =>
epic(action$, store)
);
更新:
import { combineEpics } from 'redux-observable';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import 'rxjs/add/operator/mergeMap';
import 'rxjs/add/operator/mapTo';
const PING = 'PING';
const PONG = 'PONG';
const pingEpic = action$ => {
const obser = action$.ofType(PING);
return obser.mapTo({ type: PONG });
}
export const epic$ = new BehaviorSubject(combineEpics(pingEpic));
export const createRootEpic = (action$, store) =>
epic$.mergeMap(epic =>
epic(action$, store)
);
mapTo
方法可用于BehaviorSubject
对象(epic$.mapTo
可用),但不可用于ActionsObservable
对象(action$.mapTo
不是一个函数)。问题很可能是您意外拥有两个RxJS副本。这可能发生在几种情况下,但在您的具体情况下,听起来很可能发生。该特定问题已在5.5.1中修复(5.5.2现在是最新版本)
确保已安装RxJS 5.5.1或更高版本——如果您的semver范围较广,则可能需要删除node_模块并重新安装以在本地获得更新版本。您还可以通过查看
“version”
字段的node_modules/rxjs/package.json进行三重检查,通常在底部是否尝试导入“rxjs/add/operator/switchMap”?@msanford更新了问题以反映MapTo
,而不是switchMap
。在webpack.config.js
中,添加一个数组,其中包含[“”、“.webpack.js”、“.web.js”、“.ts”、“.js”、“.json”]
。这有用吗?是的,但它不起作用。奇怪的是,导入完整的rxjs工作,它也包含在捆绑地图中,但导入特定的运算符,代码包含在js捆绑包中,但文件不包含在捆绑地图中。我重新安装了所有包,只是为了删除rxjs的两个副本(如果有的话),并将raxjs更新为5.5.2。但它不起作用。我使用'BehaviorSubject'异步添加epics。当我导入一个操作符时,import'rxjs/add/operator/mapTo'
,它可用于行为主体
对象,但不可用于操作可维护
对象。嘿@PranabGupta我看到你接受了我的答案,它是否最终起作用了?是的,这是由于SSR导致的RxJS的两个副本。我对6.5.4也有同样的问题。在您将其与webpack打包之前,Thread.lock只能显示rxjs的一个版本。还有什么提示吗?