Nov 05, 2025Laisser un message

Comment mettre à jour un état imbriqué dans un Reducer ?

Salut! En tant que fournisseur de réducteurs, on me demande souvent comment mettre à jour l'état imbriqué dans un réducteur. C'est un sujet qui peut être un peu délicat, mais une fois qu'on l'a compris, cela devient beaucoup plus facile. Dans cet article de blog, je partagerai quelques trucs et astuces sur la façon de gérer efficacement les mises à jour d'état imbriquées.

Tout d’abord, comprenons ce qu’est l’état imbriqué. Dans un réducteur, l'état peut être un objet qui contient d'autres objets ou tableaux. Par exemple, vous pouvez avoir un objet d'état qui représente un profil utilisateur, et à l'intérieur de cet objet, il y a des sous-objets pour les informations de contact, les préférences, etc. Lorsque vous devez mettre à jour une partie spécifique de cette structure imbriquée, vous devez faire attention à ne pas muter l'état directement, car Redux (ou d'autres bibliothèques de gestion d'état qui utilisent des réducteurs) s'appuient sur l'immuabilité.

Pourquoi l'immuabilité est importante

L'immuabilité est cruciale lorsque l'on travaille avec des réducteurs. Lorsque vous mettez à jour l'état, vous êtes censé renvoyer un nouvel objet d'état plutôt que de modifier celui existant. En effet, les réducteurs sont des fonctions pures et la mutation de l'état peut entraîner un comportement inattendu, comme des composants qui ne sont pas restitués correctement.

Disons que vous disposez d'un simple réducteur avec un état imbriqué comme celui-ci :

Right Angle Planetary ReducerNema 34 Reduction Gearbox

const initialState = { utilisateur : { nom : 'John Doe', contact : { email : 'johndoe@example.com', téléphone : '123 - 456 - 7890' } } } ; function userReducer(state = initialState, action) { switch (action.type) { case 'UPDATE_EMAIL' : // Nous verrons comment mettre à jour l'e-mail ici return state ; par défaut : état de retour ; } }

Mise à jour de l'état imbriqué - Copie superficielle

Une façon de mettre à jour l’état imbriqué consiste à créer une copie superficielle de l’objet d’état. Vous pouvez utiliser l'opérateur spread en JavaScript pour y parvenir. Mettons à jour l'e-mail dans l'exemple ci-dessus :

function userReducer(state = initialState, action) { switch (action.type) { case 'UPDATE_EMAIL' : return { ...state, user : { ...state.user, contact : { ...state.user.contact, email : action.payload } } } ; par défaut : état de retour ; } }

Dans ce code, nous créons un nouvel objet d'état. Tout d’abord, nous diffusons l’objet d’état existant. Ensuite, nous répartissons l'objet utilisateur dans le nouvel état. Enfin, nous diffusons l'objet contact et mettons à jour la propriété email avec la nouvelle valeur de la charge utile de l'action.

Utiliser des bibliothèques pour des mises à jour plus faciles

Si votre état a une imbrication très profonde ou si vous trouvez l'approche de l'opérateur de propagation trop lourde, vous pouvez utiliser des bibliothèques comme immer. Immer vous permet d'écrire du code qui semble muter l'état, mais sous le capot, il crée une copie immuable.

Voici comment utiliser Immer pour mettre à jour le même état imbriqué :

importer des produits de « immer » ; const initialState = { utilisateur : { nom : 'John Doe', contact : { email : 'johndoe@example.com', téléphone : '123 - 456 - 7890' } } } ; function userReducer(state = initialState, action) { return product(state, draft => { switch (action.type) { case 'UPDATE_EMAIL': draft.user.contact.email = action.payload; break; default : // Ne rien faire } }); }

Avec Immer, le code semble beaucoup plus propre et intuitif. Vous écrivez essentiellement du code comme si vous modifiiez l'état, mais Immer se charge de créer une version immuable de l'état pour vous.

Applications du monde réel dans l'approvisionnement en réducteurs

En tant que fournisseur de réducteurs, nous traitons différents types de réducteurs comme leRéducteur planétaire Nema 23,Réducteur planétaire à angle droit, etRéducteur Nema 34. Dans le logiciel qui contrôle ces réducteurs, une bonne gestion de l’état est essentielle.

Par exemple, dans un système de contrôle pour une boîte de vitesses planétaire Nema 23, l'état peut contenir des informations sur la vitesse, le couple et la température actuels de la boîte de vitesses. Si vous devez mettre à jour la lecture de la température dans l'état, vous suivrez les mêmes principes d'immuabilité et de mises à jour d'état imbriquées.

Gestion des tableaux dans un état imbriqué

Les tableaux imbriqués peuvent également être un peu difficiles à mettre à jour. Supposons que vous ayez un état avec un tableau d'utilisateurs et que chaque utilisateur dispose d'un objet imbriqué pour les informations de contact :

const initialState = { utilisateurs : [ { identifiant : 1, nom : 'John Doe', contact : { email : 'johndoe@example.com', téléphone : '123 - 456 - 7890' } }, { identifiant : 2, nom : 'Jane Smith', contact : { email : 'janesmith@example.com', téléphone : '098 - 765 - 4321' } } ] }; function userListReducer(state = initialState, action) { switch (action.type) { case 'UPDATE_USER_EMAIL' : return { ...state, utilisateurs : state.users.map(user => { if (user.id === action.payload.userId) { return { ...user, contact : { ...user.contact, email : action.payload.newEmail } }; } return user; }) } ; par défaut : état de retour ; } }

Dans cet exemple, nous utilisons la fonction map pour parcourir le tableau des utilisateurs. Si l'identifiant de l'utilisateur correspond à l'identifiant utilisateur dans la charge utile de l'action, nous créons un nouvel objet utilisateur avec l'e-mail mis à jour. Sinon, nous renvoyons l'objet utilisateur d'origine.

Conclusion

Mettre à jour l'état imbriqué dans un réducteur peut être un peu un défi, mais avec les bonnes techniques, cela devient gérable. Que vous utilisiez l'opérateur spread pour des copies superficielles ou une bibliothèque comme Immer, la clé est de maintenir l'immuabilité.

En tant que fournisseur de réducteurs, nous comprenons l'importance d'une bonne gestion de l'état dans le logiciel qui contrôle nos réducteurs. Si vous recherchez des réducteurs de haute qualité comme leRéducteur planétaire Nema 23,Réducteur planétaire à angle droit, ouRéducteur Nema 34, et vous avez des questions ou souhaitez discuter de vos besoins spécifiques, n'hésitez pas à nous contacter. Nous sommes là pour vous aider à trouver la solution de réducteur parfaite pour vos besoins.

Références

  • Réagissez à la documentation officielle sur la gestion de l'État
  • Toujours la documentation de la bibliothèque

Envoyez demande

whatsapp

Téléphone

Messagerie

Enquête