【问题标题】:Redux reducer throwing up intermittent errorRedux减速器抛出间歇性错误
【发布时间】:2016-02-29 22:52:57
【问题描述】:

我有一个在 IOS 模拟器中运行的 react 本机应用程序。在初始化期间,它读取 Parse 数据库并使用以下 reducer 填充 redux 数据存储:

    export default function items( state = [], action ) {
        switch (action.type) {
            case types.ADD_ASSIGNMENT:

                return [
                    ...state, 
                    {
                        assignmentId: action.assignmentId,
                        shopperId: action.shopperId,
                        itemId: action.itemId,
                        createdAt: action.createdAt
                    }
                ];
             case LOGOUT_SUCCESS:
                return [];

            default:
                return state;
        }
    }

当我重复运行该应用程序时,它大约有 3 次失败,并出现以下 redux-logger 错误:

action ADD_ASSIGNMENT @ 19:02:09.732
    prev state Object {router: Object, auth: Object, device: Object, global: Object, profile: Record…}
    action Object {type: "ADD_ASSIGNMENT", assignmentId: "oNncJdVT16", shopperId: "aoieAPH6ll", itemId: "gza3038iPN", createdAt: Tue Feb 09 2016 11:43:48 GMT-0500 (EST)}
    error TypeError: Cannot read property 'itemId' of null(…)
    next state Object {router: Object, auth: Object, device: Object, global: Object, profile: Record…}
        assignments: Array[1]
            0: Object
                assignmentId: "oNncJdVT16"
                createdAt: Tue Feb 09 2016 11:43:48 GMT-0500 (EST)
                itemId: "gza3038iPN"
                shopperId: "aoieAPH6ll"

请注意错误如何指出 itemId 为空,但操作实际上包含非空 itemId。下一个状态似乎是正确的,但应用程序在遇到此错误后无法恢复(不幸的是,它不会抛出带有附加信息的红屏)。

我还捕获了相同的 redux-logger 事件,显示相同的操作而没有任何错误:

action ADD_ASSIGNMENT @ 19:01:50.601
    prev state Object {router: Object, auth: Object, device: Object, global: Object, profile: Record…}
    action Object {type: "ADD_ASSIGNMENT", assignmentId: "oNncJdVT16", shopperId: "aoieAPH6ll", itemId: "gza3038iPN", createdAt: Tue Feb 09 2016 11:43:48 GMT-0500 (EST)}
    next state Object {router: Object, auth: Object, device: Object, global: Object, profile: Record…}
        assignments: Array[1]
            0: Object
                assignmentId: "oNncJdVT16"
                createdAt: Tue Feb 09 2016 11:43:48 GMT-0500 (EST)
                itemId: "gza3038iPN"
                shopperId: "aoieAPH6ll"

对如何处理有什么建议吗?

【问题讨论】:

  • 并不是说 itemId 为空。这是说它无法访问空对象的 itemId 属性。您的代码中是否还有其他地方试图访问 itemId 属性?

标签: react-native redux react-redux


【解决方案1】:

好的,想通了。我将 Redux“assignments”reducer 函数错误地命名为“items”(如我之前的代码 sn-ps 所示)。

之所以会出现间歇性行为,是因为有两种可能的代码执行路径:

1) 如果代码执行处理一个“ADD_ITEM”动作,那么“item”reducer 会正确初始化redux 数据存储中的“items”数据结构。

2) 但是,如果“ADD_PROPOSAL”先执行,则“items”数据结构没有正确初始化,从而导致错误。

【讨论】:

    猜你喜欢
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    相关资源
    最近更新 更多