redux dispatch()在更新到React 18后触发两次?

plupiseo  于 2022-11-30  发布在  React
关注(0)|答案(1)|浏览(345)

我最近更新到了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。

oprakyz7

oprakyz71#

没有“问题”。React有意地调用你的reducer两次,以使任何意外的副作用更加明显。由于你的reducer是纯的,调用它两次不会影响你的应用程序的逻辑。所以你不应该担心这个。
在实际执行中,只会呼叫一次。

相关问题