我正在尝试在表格上实现动态列大小调整(例如在 Excel 或 Google 表格中)。
在我的渲染函数中,handle
当用户在我的调整大小控件上单击鼠标时,我使用回调:
<div
className="resizer"
onMouseDown={self.handle(handleColumnResizeStart)}
/>
在处理程序中,我想为 mousemove 添加一个新的事件侦听器,以便当用户“拖动”时,我们可以绘制一些东西来指示新列边缘的结束位置。
在 mousemove 处理程序中,我想我可以发送一个包含鼠标 clientX 坐标的 reducer 操作来更新组件状态,以便渲染函数可以在拖动时绘制一些东西。
let handleColumnResizeStart = (evt, self) => {
/* this handler gets invoked when the mouse is moved */
let handleMouseMove = evt => {
Js.log(evt); /* in js land I can see that clientX is in that evt object */
Js.log(ReactEvent.Mouse.clientX(evt)); /* but this creates type errors */
};
/* adds an event handler using the bs-webapi module */
Webapi.Dom.EventTarget.addEventListener(
"mousemove",
handleMouseMove,
document,
);
};
当我尝试使用ReactEvent.Mouse.clientX(evt)
获取 clientX 的特定 int 值时,我收到此错误:
25 Webapi.Dom.EventTarget.removeEventListener(
26 ┆ "mousemove",
27 ┆ handleMouseMove,
28 ┆ document,
29 ┆ );
This has type:
ReactEvent.Mouse.t => unit
But somewhere wanted:
Dom.event => unit
The incompatible parts:
ReactEvent.Mouse.t (defined as
ReactEvent.synthetic(ReactEvent.Mouse.tag))
vs
Dom.event (defined as Dom.event_like(Dom._baseClass))
>>>> Finish compiling(exit: 1)
我对类型系统的理解在这里有限,我不确定如何将鼠标clientX坐标的值转换为变量。