Comment ajouter des éléments dans mon tableau arr[]
d'état redux dans Reducer? Je fais ça
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
la source
la source
arr: [...state.arr, why here?]
[action.newItem, ...state.arr]
insérer l'élément à la première position.push
ne renvoie pas le tableau, mais la longueur de celui-ci ( docs ), donc ce que vous faites est de remplacer le tableau par sa longueur, en perdant la seule référence que vous aviez. Essaye ça:la source
Object.assign
pour les changements du tableau à l'intérieur de l'état s'il vous plaît?Object.assign
? Il est utilisé pour les objets, et c'est essentiellement la même chose. Là où vous avez,arr:[...state.arr, action.newItem]
vous pouvez utiliserobj: Object.assign({}, state.obj, action.newItem
, à condition queobj
etnewItem
soient des objets. Si vous voulez faire cela à l'ensemble de l'État, vous pouvez simplement le faireObject.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'] });
et ça me donne ceci:{ isLoading: true, data: [ 'a', 'b', 'c', 'd', 'e' ] }
pour newObj qui est assez bon pour ce dont j'ai besoin. Mais je voulais utiliser Object.assign sans l'opérateur de propagation pour produire le même résultat. Est-ce possible?[].concat(obj.data, ['e'])
, si vous ne voulez pas utiliser les fonctionnalités ES6. Object.assign est destiné aux objets, et bien qu'il ne vous donne aucune erreur de l'utiliser sur un tableau, le résultat n'est pas une concaténation des tableaux. Si vous essayezObject.assign({}, [1, 2, 3], [4])
, vous obtenez[4, 2, 3]
en conséquence.Si vous devez insérer dans une position spécifique dans le tableau, vous pouvez le faire:
la source
J'ai un échantillon
la source