Redux-form Уничтожает мое состояние после размонтирования компонента, что дает?
Я не перехожу ни в какие специальные настройки конфигурации, я не устанавливаю/не вызываю Destroy... но мое состояние очищается... во всяком случае, чтобы это предотвратить? Мне нужно, чтобы государство держалось вокруг, так как мне нужны эти данные через мое приложение.
prev state: I see it in there... via redux-logger
action: redux-form/Destroy
next state: it gone.
Ответы
Ответ 1
Подструктура состояния формы уничтожается, когда форма размонтирована, по дизайну. Это поведение по умолчанию и ожидаемое поведение.
От v6.2.1 далее существует свойство конфигурации формы destroyOnUnmount
, которое явно включает/отключает поведение состояния в конкретной форме (docs here)
import { reduxForm } from 'redux-form';
reduxForm({
form: 'example',
destroyOnUnmount: false
})(...)
Это полезно, если у вас есть форма, состояние которой вы хотите сохранить, если пользователь оставит ее на полпути, но перемещается в сторону, а затем возвращается позже.
Ответ 2
Вероятно, вы слияете состояние redux-forms
в ваше, вы должны иметь его под отдельным ключом. Destroy
действие возвращает undefined, что хорошо, если редуктор редукционных форм управляет только частью магазина.
Убедитесь, что вы следуете шагу 1 в этом руководстве, особенно в части form: formReducer
:
https://redux-form.com/7.2.3/docs/gettingstarted.md/#step-1-of-4-form-reducer
Ответ 3
Я столкнулся с этой же проблемой лично с помощью недавно созданной формы 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
}
]
}
}
Так определенно проверьте, какое состояние вы возвращаетесь в магазин. Надеюсь эта помощь!