2016-05-20 80 views
0

的下面是從CONSOLE.LOG無法使用來更新Redux的狀態做出反應更新附加

state:{getMessagesRequest: false,projects:[]} 

項目陣列具有以下結構

{messages:Array[0],userid:'foo',username:'bar'} 

減速器推消息對象的對象我的減速狀態成使用下面的情況下,消息數組:

case GET_PROJECT_MESSAGES_SUCCESS: 
     console.log('GET_PROJECT_MESSAGES_SUCCESS invoked: ',action) 
     let target = state.projects.findIndex((project) => { 
      return project.project_id == action.project_id 
     }) 
    action.data.map((message) => { 
     console.log('TARGET IS : ',target) 
     console.log('MESSSAGE IS: ',message) 
     return update(state,{ 
     projects:{ 
      [target]:{ 
      messages:{ 
       $push:[message] 
      } 
      } 
     } 
     }) 
    }) 

的console.log示出了用於噸的有效值ARGET(目標= 0)和消息(這是一個對象)

但減速機示出了以下錯誤

Uncaught TypeError: Cannot read property 'messages' of undefined 

這表明其對[靶標] ..但目標斷裂具有正確的值,以便我不確定問題可能在哪裏。

我有一個額外的reducer差不多做一個類似的事情,但我只有一個消息對象推送到項目數組。減速機在這種情況下工作:

case NEW_CHAT_MESSAGE: //use parseInt instead of == 
     target = state.projects.findIndex((project) => { 
     return project.project_id == action.data.projectid 
     }) 
     return update(state,{ 
     projects:{ 
      [target]:{ 
      messages:{ 
       $push:[action.data] 
      } 
      } 
     } 
     }) 

action.data是一個對象。第一個reducer處理一個對象數組 - 因此是map函數。

問題在哪裏?

更新:它很奇怪,但第二減速NEW_CHAT_MESSAGE一次GET_PROJECT_MESSAGES_SUCCESS執行完成後也被調用。該錯誤是由new_chat減速器發送的。該州仍然沒有得到更新。難道是一個問題,由於來自第一減速器的多個返回?(因爲我遍歷對象?)

回答

0

卷繞這樣做,而不是通過陣列循環

return update(state,{ 
     projects:{ 
     [target]:{ 
      messages:{ 
      $set:action.data 
      } 
     } 
     } 
    })