@Denis_8106

Почему появляется бесконечный цикл в моем коде?

Почему появляется бесконечный цикл в моем коде?
Появляется сообщение: Error: Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.

import React, { useState } from 'react';
import { useLocation } from 'react-router-dom';
import Switcher from '../Switcher/Switcher';
import { contextArr } from '../../db';

import './Setting.scss';

export default function Component() {
	const location = useLocation();
	let [lang, setLang] = useState('en');

	const chooseLang = (e) => {
		setLang(e.target.checked ? (lang = 'ua') : (lang = 'en'));
	};

	window.location = location.pathname + '#' + lang;

	for (let key in contextArr) {
		let elem = document.querySelector('.lng-' + key);
		if (elem) {
			elem.innerHTML = contextArr[key][lang];
		}
	}

	return (
		<section id='setting'>
					<Switcher
						id='lang'
						title='Language'
						label_lt='English'
						label_rt='Українська'
						value={lang}
						onClick={chooseLang}
					/>
		</section>
	);
}
  • Вопрос задан
  • 193 просмотра
Решения вопроса 1
Alexandroppolus
@Alexandroppolus
кодир
Судя по всему, ошибка выскакивает в каком-то другом, классовом компоненте.
Здесь вижу такую проблему: window.location меняется в рендере, что совсем неправильно. Это должно происходить в useEffect
useEffect(() => {
  window.location = location.pathname + '#' + lang;
}, [location.pathname, lang]);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы