[react-native] React 기본 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
    }
}



답변

돌연변이없이 배열에 항목을 추가하는 두 가지 옵션

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


답변

샘플이 있습니다

import * as types from '../../helpers/ActionTypes';

var initialState = {
  changedValues: {}
};
const quickEdit = (state = initialState, action) => {

  switch (action.type) {

    case types.PRODUCT_QUICKEDIT:
      {
        const item = action.item;
        const changedValues = {
          ...state.changedValues,
          [item.id]: item,
        };

        return {
          ...state,
          loading: true,
          changedValues: changedValues,
        };
      }
    default:
      {
        return state;
      }
  }
};

export default quickEdit;


답변