gpt4 book ai didi

reactjs - Monaco Editor deltaDecorations 更改整个文本的样式,而不仅仅是给定范围

转载 作者:行者123 更新时间:2023-12-04 07:23:44 32 4
gpt4 key购买 nike

我正在使用带有 React 的 Monaco 编辑器.我想更改一行中特定范围的背景颜色。我正在关注 this tutorial这是来自官方文档。

代码如下所示。

const editorDidMount = (editor, monaco) => {
const r = new monaco.Range(1, 3, 1, 10);
editor.deltaDecorations(
[],
[
{
range: r,
options: {
inlineClassName: "myInlineDecoration",
},
},
]
);
};

这就是我创建编辑器元素的方式。没什么特别的。

<MonacoEditor
width={800}
height={400}
language="java"
value={value}
onChange={onValueChange}
editorDidMount={editorDidMount}
/>

和CSS

.myInlineDecoration {
background: lightgreen;
}

问题在于,这会将整个文本的背景色更改为 lightgreen,而不仅仅是给定的范围。

看起来像这样。但我只想要一个特定的范围,而不是所有的。 enter image description here

我尝试了 here 中的不同选项但它们都没有任何区别。

如果需要更多信息,请告诉我。

最佳答案

正如您在评论中提到的,问题似乎是该值开始时为空白,然后选择在更改时自动扩展为整个文本。

如果您想在文本更改时保留装饰,您可以将 monaco 对象存储在 ref 中,并在每次值更改时执行的 useEffect Hook 中使用它们。

...
const monacoObjects = useRef(null);

const editorDidMount = (editor, monaco) => {
monacoObjects.current = {
editor,
monaco,
};
};

useEffect(() => {
if (!monacoObjects.current) return;
const { monaco, editor } = monacoObjects.current;
const r = new monaco.Range(1, 3, 1, 10);
editor.deltaDecorations(
[],
[
{
range: r,
options: {
inlineClassName: "myInlineDecoration",
},
},
]
);
}, [value]);

return (
<MonacoEditor
width={800}
height={400}
language="java"
value={value}
onChange={onValueChange}
editorDidMount={editorDidMount}
/>
);
...

关于reactjs - Monaco Editor deltaDecorations 更改整个文本的样式,而不仅仅是给定范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68342605/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com