Я использую createBrowserHistory
с getUserConfirmation
для обработки подтверждения пользователя при выходе с страницы, на которой изменилось состояние формы:
import { createBrowserHistory } from 'history';
import store from './store';
import { displayPrompt } from './ui/navigation-prompt/navigationPromptDucks';
export default createBrowserHistory({
getUserConfirmation(message, callback) {
store.dispatch(displayPrompt(message, callback));
},
});
Работает хорошо: когда я начинаю редактировать форму иЯ пытаюсь покинуть текущую страницу, я получил запрос на подтверждение.
Теперь, скажем, у меня есть кнопка удаления для удаления ресурса формы, и когда удаление прошло успешно, я получил перенаправление истории на страницу со списком ресурсов.
Моя проблема: если я начинаю редактировать форму и, наконец, решаю нажать кнопку удаления, чтобы удалить ресурс, а не редактировать его, история вызывает изменение формы и отображает запрос на подтверждение перед тем, какперенаправление истории.
У меня есть два варианта.Во-первых, я могу вернуть исходное состояние формы, чтобы избежать появления запроса.Во-вторых, существует другой способ предотвратить появление в некоторых случаях запроса.
Какое решение является лучшим?Если это второй, подскажите, как это сделать?
Решение 1 (первый выбор)
Сброс формы до перенаправления истории:
const mapDispatchToProps = (dispatch, { user, history, t }) => ({
deleteUser: () => new Promise((resolve, reject) => {
dispatch(newAlertDialog(
t('confirmDeleteUser', { user: user.name }),
t('confirmDeleteTitle'),
() => dispatch(requestDeleteUser(user.id, resolve, reject)),
t('delete'),
))
}).then(() => {
// reset form to avoid prompt user confirmation
dispatch(reset('EditUser'));
history.push('/users');
})
});