2016-12-01 7 views
44

Как добавить элементы в мой массив arr [] состояния redux в редукторе? Я делаю this-Как добавить элемент в массив в редукторе React native redux?

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] 
    } 

ИЛИ

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

Спасибо, у меня была та же проблема, и ваш ответ решил. –

Смежные вопросы