¿Cómo agrego elementos en mi matriz arr[]
de estado redux en reductor? Yo estoy haciendo esto-
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
}
}
react-native
redux
react-redux
coderzzz18
fuente
fuente
arr: [...state.arr, why here?]
[action.newItem, ...state.arr]
insertaría el elemento en la primera posición.push
no devuelve la matriz, sino su longitud ( docs ), por lo que lo que está haciendo es reemplazar la matriz con su longitud, perdiendo la única referencia que tenía. Prueba esto:fuente
Object.assign
los cambios de la matriz dentro del estado por favor?Object.assign
? Se usa para objetos, y es esencialmente lo mismo. Donde se tienearr:[...state.arr, action.newItem]
se puede utilizarobj: Object.assign({}, state.obj, action.newItem
, siempre queobj
ynewItem
son objetos. Si quieres hacer eso a todo el estado, puedes hacerloObject.assign({}, state, {arr: [..state.arr, action.newItem]})
var obj = { isLoading: true, data: ['a', 'b', 'c', 'd'] } var newObj = Object.assign({}, obj, { data: [...obj.data, 'e'] });
y me da esto:{ isLoading: true, data: [ 'a', 'b', 'c', 'd', 'e' ] }
para newObj, que es lo suficientemente bueno para lo que necesito. Pero quería usar Object.assign sin el operador de propagación para producir el mismo resultado. ¿Es eso posible?[].concat(obj.data, ['e'])
si no desea utilizar las funciones de ES6. Object.assign está destinado a objetos, y aunque no le dará ningún error al usarlo en una matriz, el resultado no es una concatenación de las matrices. Si lo intentasObject.assign({}, [1, 2, 3], [4])
, obtienes[4, 2, 3]
como resultado.Si necesita insertar en una posición específica en la matriz, puede hacer esto:
fuente
Tengo una muestra
fuente