Como adiciono elementos na minha matriz arr[]
de estado redux no redutor? Eu estou fazendo isso-
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
fonte
fonte
arr: [...state.arr, why here?]
[action.newItem, ...state.arr]
inseriria o elemento na primeira posição.push
não retorna a matriz, mas o comprimento ( docs ); portanto, o que você está fazendo é substituir a matriz pelo comprimento, perdendo a única referência a ela. Tente o seguinte:fonte
Object.assign
as alterações da matriz dentro do estado, por favor?Object.assign
? É usado para objetos e é essencialmente a mesma coisa. Onde vocêarr:[...state.arr, action.newItem]
pode usarobj: Object.assign({}, state.obj, action.newItem
, desde queobj
enewItem
sejam objetos. Se você quiser fazer isso para todo o estado, você pode simplesmente fazerObject.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'] });
e isso me dá o seguinte:{ isLoading: true, data: [ 'a', 'b', 'c', 'd', 'e' ] }
para newObj, que é bom o suficiente para o que eu preciso. Mas eu queria usar Object.assign sem o operador spread para produzir o mesmo resultado. Isso é possível?[].concat(obj.data, ['e'])
, se você não quiser usar os recursos do ES6. Object.assign é destinado a objetos e, embora não dê erros para usá-lo em uma matriz, o resultado não é uma concatenação das matrizes. Se você tentarObject.assign({}, [1, 2, 3], [4])
, você obtém[4, 2, 3]
como resultado.Se você precisar inserir em uma posição específica na matriz, faça o seguinte:
fonte
Eu tenho uma amostra
fonte