【问题标题】:redux-observable: Uncaught TypeError: Cannot read property 'apply' of undefinedredux-observable:未捕获的类型错误:无法读取未定义的属性“应用”
【发布时间】:2018-09-27 02:45:21
【问题描述】:

您好,我正在尝试一个简单的 redux-observable 示例。这是用户的示例注册。该应用程序甚至没有启动。我最后得到了错误。当我在 chrome 中调试时,我得到一个未定义的史诗数组。我不明白我错过了什么。你能帮我么 ?
下面是组合图

import {combineEpics} from "redux-observable";
import { ajax } from 'rxjs/observable/dom/ajax';
import  {  map,  catchError, mergeMap } from 'rxjs/operators'
import {ofType} from 'redux-observable'
import { merge } from 'rxjs/observable/merge';

import { createUserSuccess ,CREATE_USER_FAILURE,CREATE_USER}  from '../actions/createUser';


const createUserEpic = action$ => action$.pipe(
    ofType(CREATE_USER),
    mergeMap(action => ajax.post("http://localhost:8080/signup", action.payload).pipe(
        map(response => createUserSuccess(response)),
        catchError(error => of({
            type: CREATE_USER_FAILURE,
            payload: error.xhr.response,
            error: true
        }))
    ))
);

 const rootEpic = combineEpics(

     createUserEpic


);



 export default rootEpic;

存储和中间件初始化:

import React from "react";
import ReactDOM from "react-dom";
import { Provider } from "react-redux";
import { createStore, applyMiddleware } from "redux";
import { BrowserRouter, Route, Switch } from "react-router-dom";
import { createEpicMiddleware } from 'redux-observable';


import PostsIndex from "./components/posts_index";
import reducers from "./reducers";

import epics from "./epics";



//import PostsIndex from "./components/posts_index";
import Login from "./components/login";
import Signup from "./components/signup";
//import PostsShow from "./components/posts_show";

const epicMiddleware = createEpicMiddleware();
const createStoreWithMiddleware = applyMiddleware(epicMiddleware)(createStore);

const store = createStoreWithMiddleware(reducers);

epicMiddleware.run(epics);

ReactDOM.render(
    <Provider store={store}>
        <BrowserRouter>
            <div>
                <Switch>


                    <Route path="/signup" component={Signup} />
                    <Route path="/" component={Login} />

                </Switch>

            </div>
        </BrowserRouter>
    </Provider>,
    document.querySelector(".container")

);

createUser.js

export const CREATE_USER = "create_user";
export const CREATE_USER_FAILURE = "create_user_failure"
const ROOT_URL = "http://localhost:8080/signup";
const API_KEY = "?key=PAPERCLIP1234";





export function createUserSuccess(response) {

    return {
        type: CREATE_USER,
        payload: response
    };

}
export function createUserFailure(error) {
    return {
        type: CREATE_USER_FAILURE,
        payload: error
    };
}



Uncaught TypeError: Cannot read property 'apply' of undefined
    at merger (combineEpics.js:22)
    at MapSubscriber.eval [as project] (createEpicMiddleware.js:36)
    at MapSubscriber._next (map.js:79)
    at MapSubscriber.Subscriber.next (Subscriber.js:93)
    at Subject.next (Subject.js:55)
    at Function.epicMiddleware.run (createEpicMiddleware.js:70)
    at eval (index.js:49)
    at Object../src/index.js (bundle.js:10320)
    at __webpack_require__ (bundle.js:20)
    at eval (webpack:///multi_(webpack)-dev-server/client?:2:18)

【问题讨论】:

  • 没有更多的调试发现 rxjs__WEBPACK_IMPORTED_MODULE_0__["merge"] 返回为未定义。

标签: redux-observable


【解决方案1】:

问题出在旧版本的 rxjs 上。我们需要将 rxjs 版本更新为 6。

"redux-observable": "^1.0.0",
"rxjs": "^6.0.0",
"rxjs-compat": "^6.3.3"

【讨论】:

    猜你喜欢
    • 2019-12-07
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    相关资源
    最近更新 更多