如何在React中实时绘制鼠标移动轨迹?
我在做一个画板功能,想记录并实时显示鼠标移动的路径,但发现轨迹断断续续,甚至有时候根本不显示。我监听了 mousemove 事件,并把坐标存到 state 里,然后用 SVG 的 polyline 渲染,可效果很卡,还经常漏点。
是不是 setState 太频繁导致的?或者我的渲染方式有问题?下面是我目前的简化代码:
const MouseTrail = () => {
const [points, setPoints] = useState([]);
const handleMouseMove = (e) => {
setPoints(prev => [...prev, { x: e.clientX, y: e.clientY }]);
};
return (
<div onMouseMove={handleMouseMove} style={{ width: '100vw', height: '100vh' }}>
<svg style={{ position: 'absolute', top: 0, left: 0 }}>
<polyline points={points.map(p => <code>${p.x},${p.y}</code>).join(' ')}
stroke="red" fill="none" />
</svg>
</div>
);
};
用 ref + requestAnimationFrame 优化版:
如果点太多还是卡,直接换 canvas,渲染上千个点都没问题: