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。嘿,这不是问题所在。它被多次调用。这就是问题所在。我尝试使用单独的回调,但即使这样,它们也被多次调用