React/Redux: обнаружение и выполнение инструкций перед уничтожением компонента

Ола,

В моем состоянии редукции у меня есть логическое значение isEditing, инициируемое в false, для управления режимом редактирования профиля. Я создаю избыточное действие для переключения этого состояния. Ниже скрин рендера компонента.

React/Redux: обнаружение и выполнение инструкций перед уничтожением компонента

React/Redux: обнаружение и выполнение инструкций перед уничтожением компонента

В большинстве случаев работает:

Когда я нажимаю «Изменить имя», я переключаюсь на true и отображаю форму редактирования.

Когда я нажимаю «Сохранить» (или «Отмена»), он выполняет (или нет) запрос API, затем переключается на false, отображая исходный компонент.

Но если я начну редактирование, а затем выйду из страницы вручную (через ссылку с логотипом или URL-адрес), а затем вернусь на эту страницу, очевидно, режим редактирования все еще активен в true.

Я хотел бы перевести свое состояние в false, когда я покидаю страницу, но я не нахожу никакой возможности отправить действие до того, как компонент будет уничтожен (например, старый метод программирования класса componentWillUnmount() или эквивалент beforeUnmount VueJS)

PS: я использую реактивный маршрутизатор V6. Кажется, хук был реализован во время бета-тестирования, но так и не был выпущен, и с тех пор никаких новостей :(

Альтернативой является установка значения false при создании компонента с помощью useEffect. Это работает, но я думаю, что это не то место. Я вижу, что режим редактирования открывается, а затем закрывается в моем пользовательском интерфейсе в течение нескольких мс.

заранее спасибо

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
20
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я считаю, что вы могли бы отправить действие в возвращаемом значении useEffect, например useEffect(() => { return () => dispatch(changeEditMode(false)) }, []). Это в основном похоже на componentWillUnmount().

Спасибо. И ваше решение, и решение Мирчи Матеи сработали. Не могли бы вы сделать игру «Камень, ножницы, бумага, ящерица Спока», чтобы решить между вами, какое решение является лучшим? :D

Keitaro 18.03.2022 11:24
Ответ принят как подходящий

Попробуйте использовать очистку на хук useEffect

   useEffect(() => {
    // Specify how to clean up after this effect:
    return function cleanup() {
      // make redux call to toggle edit mode
    };
  });

Спасибо. И ваше решение, и решение Мауро Тенти сработали. Не могли бы вы сделать игру «Камень, ножницы, бумага, ящерица Спока», чтобы решить между вами, какое решение является лучшим? :D

Keitaro 18.03.2022 11:24

Но я приму ваше решение, потому что я впервые слышу об очистке(), и я думаю, что было бы интересно провести некоторое исследование.

Keitaro 18.03.2022 11:27

О, очистка не является зарезервированным словом реакции. Так что оба ответа равны, идеально :)

Keitaro 18.03.2022 12:11

Тип возвращаемого значения useEffect — это функция, но ее имя делает ее более читабельной. Пример, который я опубликовал, взят непосредственно из документов.

Mircea Matei 18.03.2022 15:30

Другие вопросы по теме