插入符号显示滞后(插入符号不会在位置更改时重置)
Lags in caret display (caret does not reset on position change)
我在我的 React 应用程序中使用 Prismjs,一切正常。每当我使用键盘箭头移动它时,我只是有一个插入符号显示滞后。在标准 inputs/textareas 中,插入符号看起来像是在移动时“重置”其循环。但在这里,它只是以相同的速度不断闪烁。因此,如果您连续按四次向左箭头,则必须等到插入符号再次出现才能看到您当前的位置(持续大约 0.5 秒)。这有点令人不安。
如果有帮助,这是我的代码:
import { useState, useEffect } from "react";
import Prism from "prismjs";
export default function EditCode() {
const [content, setContent] = useState("");
const handleKeyDown = (e) => {
let value = content,
selStartPos = e.currentTarget.selectionStart;
if (e.key === "Tab") {
value =
value.substring(0, selStartPos) +
" " +
value.substring(selStartPos, value.length);
e.currentTarget.selectionStart = selStartPos + 3;
e.currentTarget.selectionEnd = selStartPos + 4;
e.preventDefault();
setContent(value);
}
};
useEffect(() => {
Prism.highlightAll();
}, []);
useEffect(() => {
Prism.highlightAll();
}, [content]);
return (
<section className="codeGlobalContainer">
<textarea
className="codeInput"
spellCheck="false"
wrap="off"
cols="200"
value={content}
onChange={(e) => setContent(e.target.value)}
onKeyDown={(e) => handleKeyDown(e)}
/>
<pre className="codeOutput">
<code className={`language-javascript`}>{content}</code>
</pre>
</section>
);
}
我知道没有 CSS 属性 插入符号闪烁速度,但我能做些什么吗? handleKeyDown() 函数是我问题的根源吗?
N.B。 : 如果我 select 在我的文本区域中使用键盘输入文本,一切都会顺利进行。同样,如果我用键盘箭头移动光标并立即键入文本,也没有问题。这实际上只是插入符号的显示。
编辑:如果我删除前块,问题就解决了,插入符号 returns 恢复到基本的“移动时重置闪烁周期”状态。
经过几次测试,我发现是文本区域中的 spellCheck="false"
行导致了我的问题。所以暂时解决了。。。但是不知道为什么。
我在我的 React 应用程序中使用 Prismjs,一切正常。每当我使用键盘箭头移动它时,我只是有一个插入符号显示滞后。在标准 inputs/textareas 中,插入符号看起来像是在移动时“重置”其循环。但在这里,它只是以相同的速度不断闪烁。因此,如果您连续按四次向左箭头,则必须等到插入符号再次出现才能看到您当前的位置(持续大约 0.5 秒)。这有点令人不安。 如果有帮助,这是我的代码:
import { useState, useEffect } from "react";
import Prism from "prismjs";
export default function EditCode() {
const [content, setContent] = useState("");
const handleKeyDown = (e) => {
let value = content,
selStartPos = e.currentTarget.selectionStart;
if (e.key === "Tab") {
value =
value.substring(0, selStartPos) +
" " +
value.substring(selStartPos, value.length);
e.currentTarget.selectionStart = selStartPos + 3;
e.currentTarget.selectionEnd = selStartPos + 4;
e.preventDefault();
setContent(value);
}
};
useEffect(() => {
Prism.highlightAll();
}, []);
useEffect(() => {
Prism.highlightAll();
}, [content]);
return (
<section className="codeGlobalContainer">
<textarea
className="codeInput"
spellCheck="false"
wrap="off"
cols="200"
value={content}
onChange={(e) => setContent(e.target.value)}
onKeyDown={(e) => handleKeyDown(e)}
/>
<pre className="codeOutput">
<code className={`language-javascript`}>{content}</code>
</pre>
</section>
);
}
我知道没有 CSS 属性 插入符号闪烁速度,但我能做些什么吗? handleKeyDown() 函数是我问题的根源吗?
N.B。 : 如果我 select 在我的文本区域中使用键盘输入文本,一切都会顺利进行。同样,如果我用键盘箭头移动光标并立即键入文本,也没有问题。这实际上只是插入符号的显示。
编辑:如果我删除前块,问题就解决了,插入符号 returns 恢复到基本的“移动时重置闪烁周期”状态。
经过几次测试,我发现是文本区域中的 spellCheck="false"
行导致了我的问题。所以暂时解决了。。。但是不知道为什么。