Как добавить элемент в массив в редукторе React native redux?


Как добавить элементы в мой массив arr[] состояния 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
    }
}
3 70

3 ответа:

два разных варианта добавления элемента в массив без мутации

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

или

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

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

Если вам нужно вставить в определенную позицию в массиве, можно сделать так:

case ADD_ITEM :
    return { 
        ...state,
        arr: [
            ...state.arr.slice(0, action.pos),
            action.newItem,
            ...state.arr.slice(action.pos),
        ],
    }