2017-09-17 2 views
0

Je suis confronté à des problèmes de suppression d'un élément d'un tableau de chaque élément dans une carte dans mon état Redux.Immutable Supprimer un élément de tableau de tous les éléments de Map | Redux state

En utilisant la structure suivante

entities: { 
brands: (Map) { 
    first: { 
    ...props, 
    strategists: [ 
     '1', '2' 
    ] 
    }, 
    second: { 
    ...props, 
    strategists: [ 
     '1', '2' 
    ] 
    }, .. 
} 
} 

C'est le meilleur que je pouvais faire:

const newBrands = state 
     .get('brands') 
     .map(brand => brand.updateIn(['strategists'], strategists => strategists.filter(s => s !== id))) 

return state.set(['brands'], newBrands) 

Je ne colle pas tho et je coudn't trouve vraiment en ligne non plus.

Merci

+0

Salut! J'ai essayé de répondre à votre question et pense que je peux avoir la solution. Mais je n'ai presque même pas essayé de résoudre cette question au début à cause de l'imprécision de cette phrase: «Ça ne s'additionne pas». À l'avenir, vous voudrez probablement être plus précis: avez-vous eu une erreur? (Si oui, quelle était l'erreur?) Avez-vous obtenu un résultat inattendu? (Si oui, incluez le résultat et expliquez en quoi il diffère de ce que vous attendiez). – jonahe

Répondre

1

Je ne l'avais pas utilisé Immutable.js avant, mais je joué avec votre exemple de code et tout semble fonctionner comme prévu jusqu'à la dernière ligne, où vous état de réglage à l'aide state.set(['brands'], newBrands) au lieu de state.set('brands', newBrands); Cela aurait-il pu être le problème? Sinon, le seul changement est que j'ai supposé que le first et second devrait également être Map s, donc si vous avez eu une erreur avant alors peut-être que cela faisait aussi partie du problème.

J'inclus le code juste au cas où:

const state = Immutable.Map({}); 
 
const original = Immutable.Map({ 
 
    first: Immutable.Map({ 
 
    someProp: 'someValue1', 
 
    strategists: [ 
 
     '1', '2', '3' 
 
    ] 
 
    }), 
 
    second: Immutable.Map({ 
 
    someProp: 'someValue2', 
 
    strategists: [ 
 
     '1', '2', '3' 
 
    ] 
 
    }) 
 
}); 
 

 
const id ='2'; 
 

 
const brands = original 
 
    .map(brand => 
 
    brand.updateIn(['strategists'], strategists => 
 
     strategists.filter(s => s !== id) 
 
    ) 
 
); 
 

 
const newState = state.set('brands', brands); 
 
console.log(
 
    newState.get('brands') 
 
    .toString() 
 
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>

+1

Hey merci beaucoup, ça a fait l'affaire! –