Каждый раз, когда вы вызываете setCategory
, компонент повторно визуализируется. Затем каждый раз, когда вы визуализируете компонент, если params
существует, он снова будет вызывать setCategory
, что вызовет другой рендеринг, который снова вызовет setCategory
и так далее, пока он не достигнет предела визуализации React.
Один из возможных способов обойти это - добавить логическое значение для установки после первого раза, что предотвратит его попадание внутрь блока if
во второй раз:
const [currentCategory, setCategory] = useState({categories: Categories[0]});
const [hasParamsCategory, setParamsCategory] = useState(false);
if (params && !hasParamsCategory) {
setCategory({categories: params.categories});
setParamsCategory(true);
}
Это все еще не идеален, потому что в целом не рекомендуется напрямую вызывать функции изменения состояния во время рендеринга, но это послужит быстрым и грязным обходным путем.