当前位置: 首页 > 知识库问答 >
问题:

未捕获的TypeError:无法读取未定义的React Router Redux的属性“type”

徐杰
2023-03-14

使用“react-router-dom”:“^4.1.2”,“react-router-redux”:“^5.0.0-alpha.6”,在重定向完成后,我在console.log()中得到标题“uncatted typeerror:不能读取未定义的reacted Router redux的属性”type“。截图显示,包含有效载荷数据的可观察动作没有问题。有效负载包含表单数据(值)和历史对象。我设法发送它们,然后通过使用mergeMap而不是ES6 map的递归函数捕获它们,因为我处理的是可观察的对象。链接到回购

    import * as ActionTypes from "../ActionTypes";
    import { createPostFulfilled, fetchPosts, fetchPostsFulfilled, fetchPostsWithIdFulfilled, changeRoute } from "../actions";
    import {store, history} from "../configureStore";
    import { Observable } from "rxjs/Observable";
    import "rxjs/add/observable/combineLatest";
    import "rxjs/add/operator/debounceTime";
    import { concat as concat$ } from "rxjs/observable/concat";
    import { from as from$ } from "rxjs/observable/from";
    import { of as of$ } from "rxjs/observable/of";
    import "rxjs/add/operator/map";
    import "rxjs/add/operator/mergeMap";
    import "rxjs/add/operator/startWith";
    import "rxjs/add/operator/filter";
    import "rxjs/add/operator/switchMap";
    import "rxjs/add/operator/concatMap";
    import "rxjs/add/operator/catch";
    import "rxjs/add/observable/dom/ajax";
    import {push} from "react-router-redux";
    const ROOT_URL = "http://reduxblog.herokuapp.com/api";
    const API_KEY = "key=davide123";

    export  const fetchPostsEpic = (action$) => {

        return action$.filter((action$)=> action$.type === ActionTypes.FETCH_POSTS)
            .mergeMap(action$ => {
              return  Observable.ajax.getJSON(`${ROOT_URL}/posts/?${API_KEY}`)
                    .map(response => fetchPostsFulfilled(response), (err) => {console.log(err);});
            });
    };

    export const fetchPostsWithIdEpic = (action$) => {
        return action$.filter((action$)=> action$.type === ActionTypes.FETCH_POSTS_WITH_ID)
        .mergeMap(action$ => {
          return  Observable.ajax.getJSON(`${ROOT_URL}/posts/?${action$.payload}&${API_KEY}`)
                .map(response => fetchPostsWithIdFulfilled(response), (err) => {console.log(err);});
        });
    };

    export  const createPostEpic = (action$) => {
        const actionVectorizer = ((action$) => {
            if (action$)
            return action$.isArray() ?   [].concat(...action$.mergeMap(x => actionVectorizer(x))) : action$;
        })();
        return action$.filter((action$)=> action$.type === ActionTypes.CREATE_POST)
            .mergeMap(action$ => {
                    console.log("action$ is...");
                    console.log(action$);
                    let { values, history } = action$.payload;
                    return   Observable.ajax.post(`${ROOT_URL}/posts/?${API_KEY}`, values)
                            .map(
                                (data) => {
                                    if (data.status === 201) {
                                        console.log("Success status", data.status);
                                        history.push("/");
                                        // return createPostFulfilled(data.status);
                                    }
                                    else {console.log("Server error is", data.status);}
                                },
                                (err) => {console.log(err);}
                            );
            });
    };

共有1个答案

索瀚海
2023-03-14

在createPostEpic中,您将ajax调用的结果映射到nothing(未定义),因为您的操作创建者调用和返回是注释out,因此epic最终发出值undefined:

history.push("/");
// return createPostFulfilled(data.status);

这个未定义的值将被分派,redux-observable首先将其传递给下一个中间件(或根精简器)。在您的例子中,react-router-redux中间件是下一个,所以它接收它。

但是,react-router-redux只需要真正的操作,因此它会出错,因为它试图查找action.type,但操作没有定义。

我想你会非常喜欢学习更多关于Chrome强大的调试工具,比如它在未捕获的异常(甚至捕获的异常)上暂停的能力。使用它,我几乎能立即找到原因。一项非常有价值的技能让我的生活变得轻松多了。

 类似资料:
  • 问题内容: 如果这个问题已经回答,我深表歉意。我尝试搜索解决方案,但找不到适合我的代码的任何解决方案。我还是jQuery新手。 对于两个不同的页面,我有两种不同类型的粘滞菜单。这是两者的代码。 我的问题是,底部粘性菜单的代码不起作用,因为第二行代码会引发错误,提示“未捕获的TypeError:无法读取未定义的属性’top’”。实际上,除非将第二行以下的其他jQuery代码放在第二行之上,否则根本不

  • 问题内容: 我收到此错误,它源自jquery框架。当我尝试在文档准备好加载选择列表时,出现此错误。我似乎找不到我为什么收到此错误的信息。 它适用于change事件,但是尝试手动执行功能时出现错误。 未捕获的TypeError:无法读取未定义的属性’toLowerCase’-> jquery-2.1.1.js:7300 这是代码 问题答案: 当您调用DOMReady时,的上下文将不是元素。 您可以通

  • 问题内容: 我有一些JavaScript代码会给出此错误 码 这个错误是什么意思? 问题答案: 好像您的值之一,属性键为“值”是未定义的。在执行if语句之前测试,和是否已定义:

  • 我刚开始使用D3,在我的演示脚本中出现了以下错误- firstd3.jsp:31未捕获的TypeError:无法读取未定义的属性“linear” 我的演示代码如下 是什么导致了这个错误?以及如何解决

  • 我发现很多回答的问题与我的问题相似,但所有这些元素实际上都是“未定义的”。就我而言,它是存在的。 我的代码按预期工作。基本上,它将eventListener添加到作为锚的所有模式解除按钮中。关闭函数是找到最外层的modal div,并为其提供“hidden”类,该类将其显示设置为none。 它正确地关闭了模态,但在模态关闭后,该错误就会出现。 约会。js:61未捕获类型错误:无法读取未定义的属性“

  • 我遵循这一点,使用DataTables插件启用多个表(在同一页上)。对于手动表,它可以工作,但对于动态创建的表,它显示以下错误: 未捕获的TypeError:无法读取未定义的属性“mData” 我的页面srcipt: 我的超文本标记语言第一个表: 第二张表: 知道怎么修吗? 注意:我也阅读了这个未回答的问题,相同的错误,但我的标准不同,因此它不是重复的。

  • 我是JavaScript/jQuery的新手,我正在开发一个应用程序。尝试读取对象的属性时,我得到一个未捕获的TypeError。我的最终目标是让用户在一个文本框中输入一些内容,并基于该输入,创建一个对象,将该输入作为name属性。以下是我到目前为止的代码: 我在网站上搜索过类似的其他问题,但它们都是处理API或与我无关的问题。如果有任何帮助,我将不胜感激。

  • 我正在使用react-router V4.1.1,当我试图使用Link组件时,我得到一个警告: 如果需要,我会附上我所有的组件。谢谢你的帮助。