我最近更新到了React 18,我的菜单停止工作了......因为在一次用户单击时,调度被触发了两次,有效地打开和关闭了菜单,而不仅仅是打开它。
从我的package.json
"react": "^18.2.0",
未按预期工作的代码:
import React from 'react';
import { useDispatch, useSelector } from 'react-redux';
// ... snip
export default () => {
const dispatch = useDispatch();
const menu = useSelector((state)=>state.MenuPage.on);
function clicked() {
// somehow this function is called once
console.log('DEBUG: Menu.jsx clicked')
// but dispatch fires twice
dispatch({type: 'toggleMenuPage'});
}
return (
<div id="menu_hold">
<SVGMenu onClick={clicked} id='menu_top'/>
// ... snip
</div>
);
};
显示行为的控制台输出...如果展开menuPage输出,我可以看到on属性从true切换到false。
1条答案
按热度按时间oprakyz71#
没有“问题”。React有意地调用你的reducer两次,以使任何意外的副作用更加明显。由于你的reducer是纯的,调用它两次不会影响你的应用程序的逻辑。所以你不应该担心这个。
在实际执行中,只会呼叫一次。