2017-09-26 187 views
0

即使看到狀態被正確更新,我仍然遇到反應組件無法重新呈現的問題。我正在使用REDX,我已經閱讀過狀態變異通常是這個問題/原因,我只是不認爲我這樣做。我正在更新的值在狀態內嵌套3個深度。React/Redux組件不會重新渲染

下面是代碼:

import { RECEIVE_CURRENT_SCAN_RESULT } from '../constants'; 

const initialState = { 
    currentScanResult: {info:{}, results:[]}, 
}; 

[RECEIVE_CURRENT_SCAN_RESULT]: (state, payload) => 
    Object.assign({}, state, { 
     currentScanResult: Object.assign(state.currentScanResult, payload) 
    }), 

export function createReducer(initialState, reducerMap) { 
    return (state = initialState, action) => { 
     const reducer = reducerMap[action.type]; 

     return reducer 
      ? reducer(state, action.payload) 
      : state; 
    } 
} 
+0

用一個建議的solotion發表了一個答案,並且提出了一個非常小的編輯問題(Stackoverflow需要關於問題的'javascript'標記,否則語法高亮不起作用,這就是爲什麼你的代碼和發佈的答案中的任何代碼只是看起來像沒有顏色的灰色文本)。 – jonahe

+0

PS。我只是給我的答案加了一個說明。 – jonahe

回答

1

Object.assign第一個參數是 「目標」 對象,

所以這行

currentScanResult: Object.assign(state.currentScanResult, payload) 

仍然突變對的currentScanResult屬性州。

使用空對象作爲第一個參數在Object.assign,像你這樣的第一級,所以整個事情變成:

// empty object as target here 
Object.assign({}, state, { 
    // empty object as target here as well 
    currentScanResult: Object.assign({}, state.currentScanResult, payload) 
}) 

,並應至少測試,如果問題是突變的問題或者如果有其他需要修復的東西。

+0

它似乎在工作,非常感謝,我吮吸。 – BC00

+0

很高興聽到它的作品!你不吸!學習有時很難(如果很簡單,那麼Stackoverflow就不存在了),即使你學得很好,也很容易犯這樣的小錯誤。 – jonahe

相關問題