首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SlateJS中,当存在多个编辑器时,如何将焦点更改为特定的编辑器?

在SlateJS中,当存在多个编辑器时,如何将焦点更改为特定的编辑器?
EN

Stack Overflow用户
提问于 2020-04-15 07:57:42
回答 2查看 6.2K关注 0票数 8

我的应用程序中有多个SlateJS编辑器,表示单个页面。添加新页面时,希望将焦点更改为该页中的编辑器。

我不知道该怎么做!我已经签入了文档,并且有onFocusonBlur钩子插件,但这是为了响应焦点更改。在松弛的社区片段上有以下内容:

代码语言:javascript
复制
// Moving cursor to the end of the document
ReactEditor.focus(editor);
Transforms.select(editor, Editor.end(editor, []));

但我也不能让它起作用。这是我的代码的精简版本:

根元素

代码语言:javascript
复制
<div>
    {pages.map((pageID: number) => (
        <Page onChange={updatePage(pageID)}/>
    ))}
</div>

页面元素

代码语言:javascript
复制
<div>
    <Input onChange={onChange}/>
</div>

然后,<Input/>元素从slate-react呈现SlateEditable组件。

我尝试过RTFM,但是除了那个插件页面之外,我显然找不到任何关于管理焦点的东西。

我尝试添加了一个focusOnRender布尔支柱,并在Input元素上使用了一个钩子:

代码语言:javascript
复制
useEffect(() => {
    if (focusOnRender)
        ReactEditor.focus(editor);
}, [focusOnRender]);

但这对我不起作用。

我已经找到了文档中的这一页,它描述了一个editor.focus()函数,但是当我尝试这样做时,我得到了以下错误:

代码语言:javascript
复制
TypeError: editor.focus is not a function
EN

回答 2

Stack Overflow用户

发布于 2020-04-21 21:25:18

不确定这是否有帮助,但我已经成功地将ReactEditor.focus(editor)封装在setTimeout()中。我在组件树之外执行此操作(例如,不要将其放入组件的useEffect中,而是尝试将其放入事件处理程序中,或从控制台调用它)。

FYI,您所引用的editor.focus()文档位于Slett0.47上,0.50+中的API发生了重大变化(如果您使用的是Transforms.selectReactEditor.focus API,则使用的是版本0.50+)

票数 10
EN

Stack Overflow用户

发布于 2022-08-29 20:59:51

使用板岩v0.81.0,这就是对我有用的地方:

代码语言:javascript
复制
useMemo(() => {
   Transforms.select(editor, { offset: 0, path: [0, 0] });
}, []);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61223954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档