2016-12-01 28 views
44

如何在reducer中的我的數組arr []中添加元素? 我做這個 -如何將元素添加到React native redux的reducer中的數組?

import {ADD_ITEM} from '../Actions/UserActions' 
const initialUserState = { 
    arr:[] 
} 

export default function userState(state = initialUserState, action) 
{ 
    console.log(arr); 
    switch (action.type) 
    { 
     case ADD_ITEM: 
      return { 
         ...state, 
         arr: state.arr.push([action.newItem]) 
        } 

     default: 
      return state 
    } 
} 
+0

你不應該變異狀態! –

+0

我知道狀態永遠不會變異,只要我們改變它新的對象返回。 –

回答

101

兩種不同的選擇項添加到一個數組無突變

case ADD_ITEM : 
    return { 
     ...state, 
     arr: [...state.arr, action.newItem] 
    } 

OR

case ADD_ITEM : 
    return { 
     ...state, 
     arr: state.arr.concat(action.newItem) 
    } 
+0

哪一個應該被認爲是可取的? – sapht

+6

@sapht如果您在ES6中編寫代碼,則更喜歡第一個更具可讀性和優雅的IMO。 –

11

push不返回數組,但它的長度(docs),所以你在做什麼與它的長度更換陣列,失去了唯一的參考它,你了。試試這個:

import {ADD_ITEM} from '../Actions/UserActions' 
const initialUserState = { 

    arr:[] 
} 

export default function userState(state = initialUserState, action){ 
    console.log(arr); 
    switch (action.type){ 
     case ADD_ITEM : 
      return { 
      ...state, 
      arr:[...state.arr, action.newItem] 
     } 

     default:return state 
    } 
} 
+0

謝謝,我有同樣的問題,你的答案解決了它。 –

相關問題