英文:
What is the proper way of using HashtagNode in lexicaljs?
问题
我正在尝试使用lexicaljs处理基本功能,如标签和提及等。
要使标签(hashtags)起作用,需要做什么呢?与Twitter上的工作方式相同,例如,不通过按钮触发,而是在键入#something时触发。
我修改了基本示例1,但在键入#...时什么都不发生。
有什么想法吗?
更新:似乎没有将类(样式)应用于标签节点,尽管它在树中被正确识别:
问题可能是什么?
英文:
I am trying to get basics to work with lexicaljs, like hashtags, mentions etc.
What does one need to do to get hashtag to work? Identical to how it works on Twitter for example, not through a button but triggered as one types #something.
Modified basic example, but nothing happens as one types #...
Any ideas?
import * as React from "react";
import { useRef } from "react";
import debounce from 'lodash.debounce';
import ExampleTheme from "./theme";
import { LexicalComposer } from "@lexical/react/LexicalComposer";
import { RichTextPlugin } from "@lexical/react/LexicalRichTextPlugin";
import { OnChangePlugin } from '@lexical/react/LexicalOnChangePlugin'
import { ContentEditable } from "@lexical/react/LexicalContentEditable";
import { HistoryPlugin } from "@lexical/react/LexicalHistoryPlugin";
import { AutoFocusPlugin } from "@lexical/react/LexicalAutoFocusPlugin";
import { HeadingNode, QuoteNode } from "@lexical/rich-text";
import { TableCellNode, TableNode, TableRowNode } from "@lexical/table";
import { ListItemNode, ListNode } from "@lexical/list";
import { CodeHighlightNode, CodeNode } from "@lexical/code";
import { AutoLinkNode, LinkNode } from "@lexical/link";
import { LinkPlugin } from "@lexical/react/LexicalLinkPlugin";
import { ListPlugin } from "@lexical/react/LexicalListPlugin";
import { MarkdownShortcutPlugin } from "@lexical/react/LexicalMarkdownShortcutPlugin";
import { TRANSFORMERS } from "@lexical/markdown";
import { HashtagNode } from "@lexical/hashtag";
import LexicalErrorBoundary from "@lexical/react/LexicalErrorBoundary";
import TreeViewPlugin from "./plugins/TreeViewPlugin";
import ToolbarPlugin from "./plugins/ToolbarPlugin";
import ListMaxIndentLevelPlugin from "./plugins/ListMaxIndentLevelPlugin";
import CodeHighlightPlugin from "./plugins/CodeHighlightPlugin";
import AutoLinkPlugin from "./plugins/AutoLinkPlugin";
import "./styles.css";
function Placeholder() {
return <div className="editor-placeholder">Enter some rich text...</div>;
}
const editorConfig = {
// The editor theme
theme: ExampleTheme,
// Handling of errors during update
onError(error) {
throw error;
},
// Any custom nodes go here
nodes: [
HeadingNode,
ListNode,
ListItemNode,
QuoteNode,
CodeNode,
CodeHighlightNode,
TableNode,
TableCellNode,
TableRowNode,
AutoLinkNode,
LinkNode,
HashtagNode,
]
};
export default function Editor(props) {
function onChange(editorState) {
if(props.onChange){
props.onChange(editorState, JSON.stringify(editorState));
}
}
const delayedOnChangeHandler = useRef(debounce((editorState) => {
onChange(editorState)
}, 1000)).current;
return (
<LexicalComposer initialConfig={editorConfig}>
<div className="editor-container">
<ToolbarPlugin />
<div className="editor-inner">
<RichTextPlugin
contentEditable={<ContentEditable className="editor-input" />}
placeholder={<Placeholder />}
ErrorBoundary={LexicalErrorBoundary}
/>
<OnChangePlugin onChange={delayedOnChangeHandler}/>
<HistoryPlugin />
<TreeViewPlugin />
<AutoFocusPlugin />
<CodeHighlightPlugin />
<ListPlugin />
<LinkPlugin />
<AutoLinkPlugin />
<ListMaxIndentLevelPlugin maxDepth={7} />
<MarkdownShortcutPlugin transformers={TRANSFORMERS} />
</div>
</div>
</LexicalComposer>
);
}
Update:
It appears that the class (style) is not being applied to the hashtag node, despite it being correctly recognized in the tree:
root
└ (1) paragraph
├ (9) hashtag "#hashtag"
├ (10) text " "
> └ (14) text "bold" { format: bold }
> ^^^^
<p class="editor-paragraph ltr" dir="ltr">
<span data-lexical-text="true">#hashtag</span>
<span data-lexical-text="true"></span>
<strong class="editor-text-bold" data-lexical-text="true">bold</strong>
</p>
What could be the problem?
答案1
得分: 3
已经检查了您的示例代码 - EditorTheme中的hashtag键应该是顶级键,而不是嵌套在text属性下。
英文:
Checked out your example code - the hashtag key in EditorTheme should be a top-level key, not nested under the text property.
答案2
得分: 0
以下是翻译好的部分:
"Popping another answer on here - as clickable hashtags (especially when readonly) is a common question. I've made some progress with Node Overrides, but frustratingly it's not actually doing the expected replacement. Ideas welcome... I'll update this if I figure it out. https://codesandbox.io/s/vigorous-jepsen-3i9ydu?file=/src/Editor.js"
英文:
Popping another answer on here - as clickable hashtags (especially when readonly) is a common question. I've made some progress with Node Overrides, but frustratingly it's not actually doing the expected replacement. Ideas welcome... I'll update this if I figure it out. https://codesandbox.io/s/vigorous-jepsen-3i9ydu?file=/src/Editor.js
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论