next.js 如何使用Tippap React创建自定义输入扩展

y0u0uwnf  于 12个月前  发布在  React
关注(0)|答案(2)|浏览(137)

我想在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行为的指导,我将不胜感激。

kg7wmglp

kg7wmglp1#

我建议使用TipTap(https://tiptap.dev/api/nodes/code-block)的CodeBlock扩展。

const editor = useEditor({
    extensions: [..., CodeBlock],
    content:content
});

字符串

alen0pnh

alen0pnh2#

你有没有尝试过一个可编辑的节点视图?

相关问题