web-dev-qa-db-fra.com

Immutable.js Pousser dans un tableau dans un objet imbriqué

Supposons qu'il existe un objet:

const object = {
  'foo': {
    'bar': [1, 2, 3]
  }
}

Je dois pousser 4 à object.foo.bar tableau.

En ce moment, je le fais comme ça:

const initialState = Immutable.fromJS(object)
const newState = initialState.setIn(
  ['foo', 'bar', object.foo.bar.length],
  4
)
console.log(newState.toJS())

Mais je n'aime pas vraiment ça, car j'ai besoin d'utiliser object.foo.bar.length Sur le chemin. Dans mon exemple réel, l'objet est imbriqué beaucoup plus profondément, et obtenir la longueur du tableau semble très laid. Existe-t-il un autre moyen plus pratique?

16
Alexandr Lazarev

Cela devrait fonctionner

initialState.updateIn(['foo', 'bar'], arr => arr.Push(4))

Les références:

35
zerkms

J'utilise seamless-immutable, lorsque j'ajoute un nouvel élément au tableau d'objets imbriqués, j'ai cette erreur:

La méthode Push ne peut pas être invoquée sur une structure de données immuable.

Mon tableau a toujours la méthode Push, mais cela ne fonctionne pas. La solution est d'utiliser concat à la place, plus de détails sur # 4 :

initialState.updateIn(['foo', 'bar'], arr => arr.concat([4]));

J'espère que cette aide!

5
Huy Nguyen