【发布时间】:2018-04-26 14:19:18
【问题描述】:
我将 redux-observable 用于 react 应用,使用 webpack 进行捆绑。
当我包含来自 rxjs 的特定运算符时,例如
import 'rxjs/add/operator/mapTo';
它不起作用并引发错误
TypeError: action$.ofType(...).mapTo is not a function.
但是当我包含完整的 rxjs 库时,它可以工作
import 'rxjs';
导入特定运算符时,我的 js 包确实包含 mapTo 代码,但这些方法未包含在 Observable 原型中。我正在使用 webpack 进行捆绑。在 webpack 中导入特定的 operator 我们需要做一些特殊的事情吗?
代码:
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 不是函数)。
【问题讨论】:
-
你试过
import "rxjs/add/operator/switchMap";吗? -
@msanford 更新了问题以反映
MapTo而不是switchMap。 -
在您的
webpack.config.js中,添加一个包含["", ".webpack.js", ".web.js", ".ts", ".js", ".json"]的resolve.extensions数组。这有帮助吗? -
是的,但是没用。
-
奇怪的是,导入完整的 rxjs 有效,它也包含在捆绑地图中但导入特定运算符,代码包含在 js 捆绑包中但文件不包含在捆绑地图中。
标签: rxjs rxjs5 redux-observable