2017-07-27 93 views
4

的一些舊的價值觀在我的陣營,終極版的應用程序,我改變了Redux state,當我下一次更新狀態時,它看起來是這樣的更改Redux的狀態,而且還保持狀態

state { 
    key1: oldVal1 
    key2: oldArray1 //The value here is an array 
    . 
    . 
    . 
} 

現在.. 。

state { 
    key1: newVal1 

    //But for key2 I want to keep the value as the same oldArray1 
    //Now since that oldArray1 is not anywhere except in the old state, can I do this...? 

    key2: state.key2 
    . 
    . 
    . 
} 

所以,如果我做key2: state.key2state.key2是一個數組,將參考丟失,因爲狀態發生變化,state.key2不會指向什麼?

我只是想粗略說明object/array引用將如何影響redux中的狀態。

回答

1

請注意,Redux狀態是不可變的,所以第一個狀態和第二個狀態是兩個不同的對象,因此如果您使用Object.assign或另一個不可變的工具,則可以將舊值分配給新鍵。

 switch (action.type) { 
     case SET_VISIBILITY_FILTER: 
      return Object.assign({}, state, { 
      key1: action.newVal1, 
      key2: state.key1, 
      }) 
2

你總是想要返回一個新的狀態 - 不要改變你現有的狀態。您可以使用傳播運營商操作員返回保留了一些舊的狀態

export default function(state = {}, action) { 
switch(action.type) { 
    case WHATEVER_ACTION: 
     const newValue = action.payload.value; //assuming this comes from action 
     return { ...state, key: newValue }; 
    } 
} 

這樣你更新你想與你的新值更新密鑰的相同屬性的一個新的狀態,但一切要原樣離開將保持其舊值,因爲它傳入newState對象。

+0

所以第二次我改變狀態我返回一個新的對象,但它有一個它的值從之前的狀態,這是一個數組引用....這是我真正關心的 – Meticulous

+0

如果我是正確理解您的問題,初始狀態數組是對數組的引用。所以,當你把它放到你的新狀態時,你只需要分配相同的數組(或引用)來鍵入一個新的狀態。 – istrupin