Как мне добавить элементы в свой массив arr[]
состояния редукции в редукторе? Я делаю это-
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
источник
источник
arr: [...state.arr, why here?]
[action.newItem, ...state.arr]
вставит элемент в первую позицию.push
возвращает не массив, а его длину ( документы ), поэтому вы делаете замену массива его длиной, теряя единственную ссылку на него, которая у вас была. Попробуй это:источник
Object.assign
просьбой об изменении массива внутри состояния?Object.assign
? Он используется для объектов, и по сути это то же самое. Где естьarr:[...state.arr, action.newItem]
вы можете использоватьobj: Object.assign({}, state.obj, action.newItem
при условии, чтоobj
иnewItem
являются объектами. Если вы хотите сделать это для всего штата, вы можете просто сделатьObject.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'] });
и сделал: и это дает мне следующее:{ isLoading: true, data: [ 'a', 'b', 'c', 'd', 'e' ] }
для newObj, которого достаточно для того, что мне нужно. Но я хотел использовать Object.assign без оператора распространения, чтобы получить тот же результат. Это возможно?[].concat(obj.data, ['e'])
, если не хотите использовать функции ES6. Object.assign предназначен для объектов, и хотя он не даст вам никаких ошибок при его использовании в массиве, результат не является объединением массивов. Если попробуешьObject.assign({}, [1, 2, 3], [4])
, получишь[4, 2, 3]
в результате.Если вам нужно вставить в определенную позицию в массиве, вы можете сделать это:
источник
У меня есть образец
источник