【发布时间】:2019-07-18 14:00:25
【问题描述】:
我有一个手风琴项目,我试图只在项目第一次打开时触发 doSomething 方法:
const AccordionItem = ({index, a, b, c}: Props) => {
const [isOpen, setIsOpen] = useState(false);
const [counter, setCounter] = useState(0);
if (isOpen) {
setCounter(counter + 1);
}
if (counter === 1) {
doSomething();
}
return (
<Accordion>
<Title onClick={() => setIsOpen(!isOpen)}>
...
</Accordion>
);
}
当我点击标题时,doSomething 会触发两次,我得到一个错误:Uncaught Invariant Violation: Too many re-renders。
为什么会疯狂地重新渲染?
如果条件为counter === 1,doSomething 如何触发两次?
我尝试使用useEffect 触发一次事件,但这没有意义,因为它在componentDidMount 上触发,而这不是由第一次点击触发的。
我想了解 useState 的情况、我的逻辑以及关于如何调试重新渲染的任何指示。
【问题讨论】:
标签: javascript reactjs dom-events react-hooks setstate