2016-02-29 51 views
0

我有一个反应本机应用程序,我在IOS模拟器中运行。在初始化时,它读取解析数据库,并使用下面的减速填充一个终极版的数据存储: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; 
     } 
    } 

当我反复运行的应用程序,它具有以下Redux的记录器错误而失败的大约1 3次:

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为null,但该操作实际上包含非null的itemId。下一个状态看起来是正确的,但应用程序在遇到此错误后不会恢复(不幸的是,它不会提供附加信息的红色屏幕)。

我还抓获显示没有任何错误同样的动作相同Redux的记录器事件:

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" 

如何procced有什么建议?

+0

这并不是说itemId为空。它说它不能访问空对象的itemId属性。在你试图访问'itemId'属性的代码中还有其他地方吗? –

回答

0

好吧,算出来。我错误地将Redux“assignments”reducer函数命名为“items”(如我之前的代码片段所示)。

为什么它表现出间歇的行为的原因是因为有两种可能的代码的执行路径:

1)如果代码执行处理一个“方法add_item”动作,则“项”减速器正确初始化“项“redux数据存储区中的数据结构。

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