可观察的.map不是函数

时间:2018-06-20 13:45:21

标签: rxjs redux-observable

我疯了!作为我正在尝试的React / Nextjs应用程序的副作用 使用redux-observable获得基本的ajax请求:

import {combineEpics} from 'redux-observable'
import {mergeMap} from 'rxjs/operators'
import {ajax} from 'rxjs/ajax'

const fetchSearchEpic = action$ =>
  action$
    .ofType('FETCH_SEARCH')
    .pipe(
      mergeMap(action => 
        ajax.getJSON(`http://localhost:3001/search/${action.payload.query}`)
            .map(response => ({ type: FETCH_SEARCH_FULFILLED, response }))
      )
)

export const rootEpic = combineEpics(
  fetchSearchEpic
)

但是我无法终生获得这项工作。该请求没有被触发,我一直收到的错误是:

Uncaught TypeError: __WEBPACK_IMPORTED_MODULE_2_rxjs_ajax__.a.getJSON(...).map is not a function

现在我猜想它可能与导入依赖项的新RxJS 6方法有关,并且我需要以某种方式导入.map才能将其添加到Observable中,但是如何?

我尝试过:

import 'rxjs'
import 'rxjs/observable/map'
import {map} from 'rxjs/observable'

没有一个能达到预期的效果...

版本:

"react": "16.4.0",
"redux": "4.0.0",
"react-redux": "5.0.7",
"redux-observable": "1.0.0-beta.2",
"rxjs": "6.2.1"

1 个答案:

答案 0 :(得分:9)

map(以及其他Rx运算符)自a few reasons的RxJS 6起,就不再存在于Observable的原型中。

操作员现在改为使用pipe进行链接:

ajax.getJSON(`http://localhost:3001/search/${action.payload.query}`)
    .pipe(map(response => ({ type: FETCH_SEARCH_FULFILLED, response })

确保像这样导入map

import { map } from 'rxjs/operators';

请参见Pipeable Operators,其中概述了这些更改。