ПРЕДИСЛОВИЕ / ОПИСАНИЕ
Я пытаюсь использовать новую функцию React для веб-сайта электронной коммерции, который я создаю, и у меня возникла проблема, связанная с ошибкой в компоненте моей корзины для покупок.
Я думаю, что уместно предварять обсуждение тем, что я пытаюсь сохранить свое глобальное состояние модульным, используя несколько компонентов Context. У меня есть отдельный компонент контекста для типов товаров, которые я предлагаю, и отдельный компонент контекста для товаров в корзине покупателя.
ПРОБЛЕМА
Проблема, с которой я столкнулся, заключается в том, что когда я отправляю действие по добавлению компонента в корзину, редуктор запускается дважды, как если бы я дважды добавлял элемент в корзину. Но только когда он изначально отображается или по странным причинам, таким как отображение установлено на hidden
, а затем обратно на block
или для изменения z-index
и, возможно, других подобных изменений.
Я знаю, что это довольно многословно, но это довольно вязкая и требовательная проблема, поэтому я создал два кодекса, демонстрирующих эту проблему:
полный пример
минимальный пример
Вы увидите, что я включил кнопку для переключения display
компонентов. Это поможет продемонстрировать корреляцию css с проблемой.
Наконец, проследите за консолью в ручках кода, там будут показаны все нажатия кнопок и какая часть каждого редуктора была запущена. Проблемы наиболее очевидны в полном примере , но операторы консоли отображают проблему также в минимальном примере 1034 *.
ОБЛАСТЬ ПРОБЛЕМЫ
Я точно определил, что проблема связана с тем, что я использую состояние useContext
для получения списка элементов. Вызывается функция для генерации редуктора для моего хука useReducer
, но она возникает только тогда, когда используется другой хук. Я могу использовать функцию, которая не подлежит повторному вычислению, как хук, и не иметь проблемы, но Мне также нужна информация из моего предыдущего контекста, чтобы обходной путь не помог мне решить проблему.
Соответствующие ссылки
Я определил, что проблема не в HTML, поэтому я не буду включать ссылки на исправления, которые я пробовал. Проблема, вызванная css, не связана с css, поэтому я не буду также включать ссылки css.
useReducer Действие отправлено дважды