更新到 React 18 后,一个简单的 2 组件菜单停止工作。菜单是您单击的图标,单击菜单时会打开 MenuBox。
在 React 17 中,我得到了如下预期的行为:
升级到 React 18 后,我得到了这个行为,其中包含一个额外的点击......
菜单只会在单击时呈现 MenuBox,如下所示:
菜单
function clicked() {
console.log('DEBUG: Menu.jsx clicked')
dispatch({type: 'toggleMenuPage'});
}
return (
<div id="menu_hold">
<SVGMenu onClick={clicked} id='menu_top'/>
{menu && <MenuBox/>}
</div>
);
然而,在这次点击将 menu
切换为 true 之后...... MenuBox
然后检测到第二次点击(或传播点击),它不应该这样做单击菜单时甚至没有呈现。
菜单框
useEffect(() => {
console.log('DEBUG: MenuBox.jsx useEffect()')
function bodyClicked() {
dispatch({type: 'toggleMenuPageOff'});
console.log('DEBUG: MenuBox.jsx useEffect(): bodyClicked()')
}
document.body.addEventListener('click', bodyClicked);
return () => {
document.body.removeEventListener('click', bodyClicked);
};
});
这个“升级”破坏了菜单,因为它在打开时立即关闭,所以你永远看不到它。
我没有使用严格模式。
我在 changelog 中找不到任何相关内容.
最佳答案
我认为这是由 React Strict 模式引起的。 Further explanation
https://stackoverflow.com/questions/74690351/
相关文章:
python - Pandas dataframe,连续查找所选列中的最大值,并根据该值查找另一列的
typescript - 如何在保持默认行为的同时扩展 tsconfig 中的类型
javascript - 是的,当 .required() 为 false 时,会继续在同一个属性上
node.js - 为什么当我使用 "waitForSelector"时 Puppeeteer 导致
python - ModuleNotFoundError 即使模块被识别
haskell - 如何测试自定义 StateT 的 Monad 实例?