2017-04-06 57 views
0

我有一個狀態,其中的一部分是一個名爲'數字'的數組。其中一個動作是以下面的方式改變狀態:所有的奇數應該被改爲零,所有的偶數都應該被保留。例如:react-native redux - reducer改變數組元素

previous state 
[9, 3, 2, 6, 8] 

action 
new state 
[0, 0, 2, 6, 8] 

行動的創建者:

export const turnEven =() => { 
    return { 
    type: TURN_EVEN 
    }; 
}; 

減速機:

case TURN_EVEN: 
     return [...state, numbers: state.numbers.map(
     (i) => (i % 2 === 0 ? i : 0))]; 

這其中產生一個錯誤:意外的標記,預計, ......而 '迴歸' 路線正在被指示爲錯誤的位置。 請告知

回答

2

望着那你共享代碼:

case TURN_EVEN: 
     return [...state, numbers: state.numbers.map(
     (i) => (i % 2 === 0 ? i : 0))]; 

它看起來像這樣減速的狀態下具有不同的特性,其和爲numbers之一。

也許你想要做這個:

case TURN_EVEN: 
    return Object.assign(
    {}, 
    state, 
    { numbers: state.numbers.map(i => (i % 2 === 0 ? i : 0)) } 
); 

我還沒有看到你減速的休息,所以也許我沒有足夠的背景,但我會鼓勵你儘量使減速對於該州的每個屬性,其中一個numbers,然後使用combineReducers to combine them into one。小函數更容易處理。

如果你這樣做,那麼你可以有這樣一個對數字的減速機:

const initialState = []; 
const numbersReducer = (state = initialState, action) => { 
    swicth (action.type) { 
    case TURN_EVEN: 
     return state.map(i => (i % 2 === 0 ? i : 0)); 
    // Other action types here... 
    default: 
     return state; 
    } 
} 
+1

謝謝。我實際上使用了聯合收割機,併爲州的「數字」屬性設置了一個單獨的縮減器。上面的例子工作正常。謝謝。 – Wasteland