You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何点击按钮滚动到uiw-react-codemirror指定类名的行?

实现点击按钮滚动到CodeMirror指定行

步骤1:获取CodeMirror实例

首先通过useRef获取CodeMirror组件的实例,才能调用底层滚动API:

import { useRef } from 'react';
import CodeMirror from '@uiw/react-codemirror';

// 组件内部创建ref
const cmRef = useRef(null);

// 给CodeMirror组件添加ref属性
<CodeMirror
  ref={cmRef}
  id="codemirrorId"
  value={value}
  height={height}
  theme={darkMode ? aura : xcodeLight}
  extensions={extensions}
  onChange={onChange}
  readOnly={readOnly}
  color="text.primary"
/>

步骤2:确认目标行信息

确保你已经通过classnameExt给目标行添加了自定义类名(比如target-line),并且记录了目标行的行号(比如存在targetLineNum变量中)。

步骤3:实现滚动函数

两种实现方式任选其一:

方式一:通过行号精准滚动(推荐)

利用CodeMirror底层scrollIntoView方法定位:

const scrollToTargetLine = () => {
  if (!cmRef.current || !targetLineNum) return;
  
  const view = cmRef.current.view;
  const line = view.state.doc.line(targetLineNum);
  // align可选值:'center'(居中)、'start'(顶部)、'end'(底部)
  view.scrollIntoView({ from: line.from, to: line.to }, { align: 'center' });
};

方式二:通过类名查找DOM滚动

依赖自定义类名定位行元素:

const scrollToTargetLine = () => {
  const targetLineEl = document.querySelector('.target-line');
  if (targetLineEl) {
    // behavior: 'smooth'开启平滑滚动,可选
    targetLineEl.scrollIntoView({ behavior: 'smooth', block: 'center' });
  }
};

步骤4:绑定按钮点击事件

给按钮添加点击事件触发滚动:

<button onClick={scrollToTargetLine}>滚动到目标行</button>

补充:classnameExt示例

如果还没配置行类名,参考以下写法:

import { classnameExt } from '@uiw/react-codemirror';

const extensions = [
  classnameExt((state, line) => {
    // 给第5行添加自定义类名
    return line.number === 5 ? 'target-line' : '';
  })
];

内容的提问来源于stack exchange,提问作者Gevin Hasmitha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 19:12:10