Wie füge ich Elemente in mein Array arr[]
des Redux-Status im Reduzierer ein? Ich mache das-
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
quelle
quelle
arr: [...state.arr, why here?]
[action.newItem, ...state.arr]
würde das Element an der ersten Position einfügen.push
gibt nicht das Array zurück, sondern die Länge ( docs ). Sie ersetzen also das Array durch seine Länge und verlieren den einzigen Verweis darauf, den Sie hatten. Versuche dies:quelle
Object.assign
für die Änderungen des Arrays innerhalb des Status bitte beantworten ?Object.assign
? Es wird für Objekte verwendet und ist im Wesentlichen dasselbe. Wo Sie habenarr:[...state.arr, action.newItem]
, können Sie verwendenobj: Object.assign({}, state.obj, action.newItem
, vorausgesetzt, dassobj
undnewItem
Objekte sind. Wenn Sie das dem ganzen Staat antun wollen, können Sie es einfach tunObject.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'] });
und es gibt mir{ isLoading: true, data: [ 'a', 'b', 'c', 'd', 'e' ] }
Folgendes : für newObj, das gut genug für das ist, was ich brauche. Aber ich wollte Object.assign ohne den Spread-Operator verwenden, um das gleiche Ergebnis zu erzielen. Ist das möglich?[].concat(obj.data, ['e'])
, wenn Sie keine ES6-Funktionen verwenden möchten. Object.assign ist für Objekte gedacht, und obwohl es keine Fehler bei der Verwendung in einem Array gibt, ist das Ergebnis keine Verkettung der Arrays. Wenn Sie es versuchenObject.assign({}, [1, 2, 3], [4])
, erhalten Sie[4, 2, 3]
als Ergebnis.Wenn Sie an einer bestimmten Position im Array einfügen müssen, können Sie Folgendes tun:
quelle
Ich habe eine Probe
quelle