我想在tiptap中创建一个输入扩展,但我无法让编辑器专注于输入。
这是一个gif,我试图聚焦输入元素,但失败了,因为它将焦点恢复到编辑器中的前一个文本块。
的数据
以下是我的Tiptap自定义扩展设置:
InputBlockView:
import { Node } from "@tiptap/core";
import { ReactNodeViewRenderer } from "@tiptap/react";
import ReactInputBlockView from "./ReactInputBlockView";
export default Node.create({
name: "input_block",
content: "text*",
marks: "",
group: "block",
defining: true,
isolating: true,
parseHTML() {
return [
{
tag: "div",
preserveWhitespace: "full"
}
];
},
renderHTML({ HTMLAttributes }) {
return ["div"];
},
addNodeView() {
return ReactNodeViewRenderer(ReactInputBlockView);
}
});
字符串
ReactInputBlockView:
const ReactInputBlockView: React.FC<NodeViewProps> = (props) => {
return (
<NodeViewWrapper
contentEditable={false}
as="div"
className="group relative mx-auto flex w-full h-full gap-2 flex-col pb-1 bg-white rounded border"
>
<Input placeholder='Type here'/>
</NodeViewWrapper>
);
};
export default ReactInputBlockView;
型
我希望编辑器在我单击输入时关注输入,在我单击其他块时关注其他块。我尝试过使用如下引用的事件处理程序:
useEffect(() => {
const handleInputFocus = () => {
if (inputRef.current) {
inputRef.current.focus();
} else {
editor.chain().focus();
}
};
editor.on("selectionUpdate", handleInputFocus);
return () => {
editor.off("selectionUpdate", handleInputFocus);
};
}, [editor]);
型
我已经为编辑器启用了onClick供参考
onClick={() => {
// editor?.chain().focus().run();
}}
型
我也试过使用on(“focus”),但是focus仍然不能正常工作。如果有任何关于如何实现所需的focus行为的指导,我将不胜感激。
2条答案
按热度按时间kg7wmglp1#
我建议使用TipTap(https://tiptap.dev/api/nodes/code-block)的CodeBlock扩展。
字符串
alen0pnh2#
你有没有尝试过一个可编辑的节点视图?