web-dev-qa-db-ja.com

redux-formは、コンポーネントがアンマウントされると私の状態を破壊します。

私は特別な構成設定を渡さず、Destroyを設定/呼び出しもしません...しかし、私の状態はクリーンアップされています...とにかくこれを防ぐために?アプリケーション全体でデータが必要なため、状態を維持する必要があります。

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

フォームの状態サブツリーisは、フォームがアンマウントされると、設計により破棄されます。これはデフォルトの予想される動作です。

From v6.2.1 onwardsから、状態を明示的に有効/無効にするフォーム設定プロパティdestroyOnUnmountがあります-特定のフォームの動作を消去する( docs here

import { reduxForm } from 'redux-form';

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

これは、ユーザーが途中で放棄し、離れてナビゲートし、後で戻る場合に状態を保持したいフォームがある場合に便利です。

62
davnicwil

おそらくredux-formsの状態はあなたのものになります。別のキーの下に置く必要があります。 redux-formsレデューサーがストアの一部のみを管理する場合、Destroyアクションは未定義を返しますが、これは問題ありません。

このチュートリアルのステップ1、特にform: formReducer part: https://redux-form.com/7.2.3/docs/gettingstarted.md/#step-1-of-4-form-reducer

2
george.cz

私は最近Redux Formを使用してこの同じ問題に個人的に遭遇しました

enter image description here

enter image description here

アクションをディスパッチしてレデューサーを通過した後、redux-formがDESTROYアクションをディスパッチします。 Brennan Cheungのコメントは、レデューサーで返品/変更を行っていた状態に、ストアに返送された情報が欠落していることを認識させるのに役立ちました。これを修正した後、reduxフォームはdestroyアクションを自動的にディスパッチしなくなりました。

例:最初は、これを返していました:

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

私が実際にこれを返すつもりだったとき

    {
      "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
          }
        ]
      }
    }

したがって、ストアに戻っている状態を必ず確認してください。この助けを願っています!

0
Ryan Efendy