web-dev-qa-db-fra.com

redux-form détruit mon état une fois le composant démonté, qu'est-ce qui donne?

Je ne passe aucun paramètre de configuration spécial et je ne configure/ou n'appelle pas Destroy ... mais mon état est en cours de nettoyage ... de toute façon pour éviter cela? J'ai besoin de l'état pour rester comme j'ai besoin de ces données dans mon application.

prev state: I see it in there... via redux-logger
action: redux-form/Destroy
next state: it's gone.
29
james emanon

La sous-arborescence d'état du formulaire est détruite lorsque le formulaire est démonté, par conception. Il s'agit du comportement par défaut et attendu.

À partir de v6.2.1 il y a une propriété de configuration de formulaire destroyOnUnmount, qui active/désactive explicitement l'état -le comportement de compensation sur un formulaire spécifique ( docs here )

import { reduxForm } from 'redux-form';

reduxForm({
  form: 'example',
  destroyOnUnmount: false
})(...)

Cela est utile lorsque vous avez un formulaire dont vous souhaitez conserver l'état si l'utilisateur l'abandonne à mi-chemin, s'éloigne, puis revient plus tard.

62
davnicwil

Vous fusionnez probablement l'état de redux-forms Dans le vôtre, vous devriez l'avoir sous une clé distincte. L'action Destroy renvoie undefined, ce qui est correct si le réducteur redux-forms gère uniquement sa partie du magasin.

Assurez-vous de suivre l'étape # 1 de ce tutoriel, spécialement la partie form: formReducer: https://redux-form.com/7.2.3/docs/gettingstarted.md/#step- Réducteur de forme 1 sur 4

2
george.cz

J'ai rencontré ce même problème personnellement en utilisant Redux Form récemment

enter image description here

enter image description here

Où après avoir envoyé une action et passé par le réducteur, redéfinissez l'action DESTROY. Le commentaire de Brennan Cheung m'a aidé à réaliser que l'état que je retournais/modifiais dans mon réducteur avait des informations manquantes qui ont été renvoyées au magasin. Après avoir corrigé cela, le formulaire redux ne distribue plus automatiquement l'action de destruction.

Par exemple: Au départ, je retournais ceci:

    [
      {
        "id": "dd8684f0-8a8a-11e7-97ac-8350cad5200c",
        "timestamp": 1503771468479,
        "body": "comment2",
        "author": "author2",
        "parentId": "ee6a6c5c-1821-4280-80b7-90fa97137137",
        "voteScore": 1,
        "deleted": false,
        "parentDeleted": false
      }
    ]

Quand je voulais vraiment retourner ça

    {
      "ee6a6c5c-1821-4280-80b7-90fa97137137": {
        "id": "ee6a6c5c-1821-4280-80b7-90fa97137137",
        "timestamp": 1502253747021,
        "title": "this is a title",
        "body": "this is another body",
        "author": "author2",
        "category": "category1",
        "voteScore": 2,
        "deleted": false,
        "comments": [
          {
            "id": "dd8684f0-8a8a-11e7-97ac-8350cad5200c",
            "timestamp": 1503771468479,
            "body": "comment2",
            "author": "author2",
            "parentId": "ee6a6c5c-1821-4280-80b7-90fa97137137",
            "voteScore": 1,
            "deleted": false,
            "parentDeleted": false
          }
        ]
      }
    }

Vérifiez donc dans quel état vous retournez au magasin. J'espère que cette aide!

0
Ryan Efendy