Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript onMouseUp、onRightClick和onDblClick同时启动_Javascript_Reactjs - Fatal编程技术网

Javascript onMouseUp、onRightClick和onDblClick同时启动

Javascript onMouseUp、onRightClick和onDblClick同时启动,javascript,reactjs,Javascript,Reactjs,我正在使用@react谷歌地图/api 当我把三个回调放在一个多边形组件上时,就像这样 const callBacks = useEventCallback(t => { console.log(t); }); return ( <Polygon {...otherProps} {...callBacks} path={path} editable={disabled ? false : true}

我正在使用
@react谷歌地图/api

当我把三个回调放在一个多边形组件上时,就像这样

const callBacks = useEventCallback(t => {
    console.log(t);
  });
  return (
    <Polygon
      {...otherProps}
      {...callBacks}
      path={path}
      editable={disabled ? false : true}
      onLoad={poly => {
        polyRef.current = poly;
      }}
    />
  );
const callBacks=useventcallback(t=>{
控制台日志(t);
});
返回(
{
polyRef.current=poly;
}}
/>
);
还有useEventCallback

import { useCallback, useEffect, useState } from "react";
type CallbackType = "mouse_up" | "double_click" | "right_click" | null;
function useEventCallback(onChange: (type: CallbackType) => void) {
  const [currentCallback, setCallback] = useState<CallbackType>();
  function handleChange(e: any, type: CallbackType) {
    setCallback(type);
  }

  useEffect(() => {
    let timer;

    if (!timer) {
      timer = setTimeout(() => {
        console.log(currentCallback);
      }, 100);
    }
  }, [currentCallback]);

  const onMouseUp = useCallback((e: any) => handleChange(e, "mouse_up"), [
    handleChange,
  ]);

  const onDblClick = useCallback((e: any) => handleChange(e, "double_click"), [
    handleChange,
  ]);

  const onRightClick = useCallback((e: any) => handleChange(e, "right_click"), [
    handleChange,
  ]);
  return {
    onRightClick,
    onMouseUp,
    onDblClick,
  };
}
从“react”导入{useCallback,useffect,useState};
键入CallbackType=“mouse_up”|“双击”|“右键单击”| null;
函数useEventCallback(onChange:(类型:CallbackType)=>void){
const[currentCallback,setCallback]=useState();
函数handleChange(e:any,type:CallbackType){
setCallback(类型);
}
useffect(()=>{
让定时器;
如果(!计时器){
计时器=设置超时(()=>{
log(currentCallback);
}, 100);
}
},[currentCallback]);
const onMouseUp=useCallback((e:any)=>handleChange(e,“鼠标向上”)[
handleChange,
]);
const onDblClick=useCallback((e:any)=>handleChange(e,“双击”)[
handleChange,
]);
const onRightClick=useCallback((e:any)=>handleChange(e,“右键单击”)[
handleChange,
]);
返回{
单击鼠标右键,
一起来,,
点击,
};
}
当我右键单击某个点时

注:事件对象是相同的,无法区分它们


在调用右键单击事件时,是否有任何方法不调用鼠标向上。

因为您使用的是相同的回调函数
handleChange
。创建鼠标句柄onDblClickHandler等…@NikolaLukic。嘿,这不是问题所在。它被多次调用。这就是问题所在。我尝试使用单独的回调,但即使这样,它们也被多次调用