Jak dodać elementy w mojej tablicy arr[]
stanu Redux w reduktorze? Robię to-
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
źródło
źródło
arr: [...state.arr, why here?]
[action.newItem, ...state.arr]
wstawiłby element na pierwszej pozycji.push
nie zwraca tablicy, ale jej długość ( dokumenty ), więc to, co robisz, to zastępowanie tablicy jej długością, tracąc jedyne odniesienie do niej, jakie miałeś. Spróbuj tego:źródło
Object.assign
w sprawie zmian tablicy wewnątrz stanu?Object.assign
? Jest używany do obiektów i zasadniczo jest tym samym. Gdzie maszarr:[...state.arr, action.newItem]
można skorzystaćobj: Object.assign({}, state.obj, action.newItem
pod warunkiem, żeobj
inewItem
są obiektami. Jeśli chcesz to zrobić dla całego stanu, możesz to zrobić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'] });
i daje mi to:{ isLoading: true, data: [ 'a', 'b', 'c', 'd', 'e' ] }
dla newObj, który jest wystarczająco dobry dla tego, czego potrzebuję. Ale chciałem użyć Object. assign bez operatora spreadu, aby uzyskać ten sam wynik. Czy to jest możliwe?[].concat(obj.data, ['e'])
, jeśli nie chcesz korzystać z funkcji ES6. Obiekt Object. assign jest przeznaczony dla obiektów i chociaż użycie go w tablicy nie spowoduje żadnych błędów, wynikiem nie jest konkatenacja tablic. Jeśli spróbujeszObject.assign({}, [1, 2, 3], [4])
, otrzymasz[4, 2, 3]
wynik.Jeśli chcesz wstawić w określone miejsce w tablicy, możesz to zrobić:
źródło
Mam próbkę
źródło