У меня есть компонент, который выглядит следующим образом (очень упрощенная версия):
const component = (props: PropTypes) => {
const [allResultsVisible, setAllResultsVisible] = useState(false);
const renderResults = () => {
return (
<section>
<p onClick={ setAllResultsVisible(!allResultsVisible) }>
More results v
</p>
{
allResultsVisible &&
<section className="entity-block--hidden-results">
...
</section>
}
</section>
);
};
return <div>{ renderResults() }</div>;
}
Когда я загружаю страницу, на которой используется этот компонент, я получаю эту ошибку: Uncaught Invariant Violation: Rendered more hooks than during the previous render.
Я пытался найтиобъяснение этой ошибки, но мой поиск не дал результатов.
Когда я немного изменяю компонент:
const component = (props: PropTypes) => {
const [allResultsVisible, setAllResultsVisible] = useState(false);
const handleToggle = () => {
setAllResultsVisible(!allResultsVisible);
}
const renderResults = () => {
return (
<section>
<p onClick={ handleToggle }>
More results v
</p>
{
allResultsVisible &&
<section className="entity-block--hidden-results">
...
</section>
}
</section>
);
};
return <div>{ renderResults() }</div>;
}
Я больше не получаю эту ошибку.Это потому, что я включил функцию setState
в jsx, которая возвращается renderResults
?Было бы здорово получить объяснение, почему исправление работает.