2017-10-04 106 views
0

我遇到了一個問題,當我嘗試使用.push(newvalue)更新存儲中的數組時。當我推新值時,狀態從數組更新爲數組長度的值。更新之前問題React Redux array.push

州:[ 'ASD', 'SDF', '疫情週報']

狀態後:動作4

export function updateLocalCompliments(newCompliment) { 
    return ({ 
    type: LOCAL_COMPLIMENT, 
    payload: newCompliment 
    }) 
} 

減速器:(state.compliments是實際數組)

const INITIAL_STATE = { 
    compliments: [] 
} 

function compliments(state=INITIAL_STATE, action) { 
     switch (action.type) { 
     case LOCAL_COMPLIMENT: 
      return (
      Object.assign({}, state, { 
       compliments: state.compliments.push(action.payload) 
      }) 
     ) 
     default: 
      return state; 
     } 
    } 
+1

'push'不返回所述突變的陣列,但其更新長度。您需要以不同的方式處理:https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Array/push – m90

+1

'push'不應該與react-redux一起使用,因爲它會改變數組 – MinusFour

回答

2

這是因爲push方法修改它調用的數組並返回新的長度。你想要的就像concat()。

推:https://www.w3schools.com/jsref/jsref_push.asp

的concat:https://www.w3schools.com/jsref/jsref_concat_array.asp

compliments: state.compliments.concat(action.payload) 
+0

這裏有一些分支標記來比較最快的數組克隆方式:https://jsperf.com/new-array-vs-splice-vs-slice/31 – Morishiri

+0

這工作!感謝您提供更清晰的解釋和資源。 – Aaron