Javascript 当我把它放到上下文中时,为什么减速机挂钩会触发两次?
我创建了一个undo-redo组件,它在该组件中正常工作。Javascript 当我把它放到上下文中时,为什么减速机挂钩会触发两次?,javascript,reactjs,Javascript,Reactjs,我创建了一个undo-redo组件,它在该组件中正常工作。 DEF.js的URL为。我单击“go”按钮更改网格的所有内容,我可以单击“back”逐个单元格回滚内容 当我将其导入时,它会在触发时被调度两次。 Redo.js的URL为 唯一的区别是我将undo-redo组件放在redo.js的上下文中 在Redo.js中,当我复制2个单元格内容并将其粘贴到新位置时, 在我按下Ctrl-Z键之后,它会将内容回滚两次,您可能会在控制台中看到“undo”一词显示两次。(附图显示了情况) 我曾尝试将不同的变
DEF.js
的URL为。我单击“go”按钮更改网格的所有内容,我可以单击“back”逐个单元格回滚内容
当我将其导入时,它会在触发时被调度两次。
Redo.js
的URL为
唯一的区别是我将undo-redo组件放在redo.js的上下文中
在Redo.js中,当我复制2个单元格内容并将其粘贴到新位置时,
在我按下Ctrl-Z键之后,它会将内容回滚两次,您可能会在控制台中看到“undo”一词显示两次。(附图显示了情况)
我曾尝试将不同的变量放入keyDown回调挂钩依赖项数组中,但没有帮助
let keyDown=useCallback((e)=>{
console.log("keyDown");
if (e.ctrlKey){
//console.log(e.which);
switch (e.which){
case 89:
//console.log("redo:"+JSON.stringify(rosterList));
console.log("RedoBody.redo="+rosterList.canRedo);
if (rosterList.canRedo){
e.preventDefault();
rosterList.redo();
props.updateContextValue({type:"updateShiftValue"});
}
break;
case 90:
e.preventDefault();
console.log("RedoBody.undo="+rosterList.canUndo);
if (rosterList.canUndo){
rosterList.undo();
props.updateContextValue({type:"updateShiftValue"});
}
break;
default:break;
}
} else {
switch (e.which){
case 27://handle "Esc" key event
selectedRegionUtil.clearCopiedRegion();
break;
case 37://handle left arrow key event
selectedRegionUtil.selectNextCell(e,-1,0);
break;
case 38://handle up arrow key event
selectedRegionUtil.selectNextCell(e,0,-1);
break;
case 39://handle right arrow key event
selectedRegionUtil.selectNextCell(e,1,0);
break;
case 40://handle down arrow key event
selectedRegionUtil.selectNextCell(e,0,1);
break;
default:break;
}
props.updateContextValue({type:'updateSelectedRegion',value:selectedRegionUtil});
}
},[props,rosterList,selectedRegionUtil]);
有什么问题
最后,我将自定义钩子
useUndoUtil
转换为一个普通的javascript对象UndoableData
,它可以工作。你不能创建一个吗?好的,我需要一些时间。