te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>reactjs - Tiptap React-Hook-Form Controller's value in useEditor deps array removes focus on edit - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

reactjs - Tiptap React-Hook-Form Controller's value in useEditor deps array removes focus on edit - Stack Overflow

programmeradmin3浏览0评论

I have a Tiptap editor that is being controlled by React-Hook-Form. Whenever I include value in the second argument (the dependencies array) for useEditor, the editor loses focus whenever I start typing. If I remove value from the dependencies array, the editor keeps its focus, but then my form’s state is not properly synchronized. How can I make this work so that the editor doesn’t lose focus but also stays in sync with the form's value?

interface Props {
    value?: string;
    onChange?: (value: string) => void;
}

const TipTapEditor = ({ value, onChange }: Props) => {
    const editor = useEditor(
        {
            content: cleanText(value || ''),
            onUpdate: ({ editor }) => {
                onChange?.(editor.getHTML());
            },
        },
        [value] // Removing 'value' fixes focus but breaks state sync.
    );
};

export default TipTapEditor;

I use it within a Controller from React-Hook-Form like this:

<Controller
    control={control}
    name="my-name"
    render={({ field: { value, onChange } }) => (
        <TipTapEditor value={value} onChange={onChange} />
    )}
/>

I have a Tiptap editor that is being controlled by React-Hook-Form. Whenever I include value in the second argument (the dependencies array) for useEditor, the editor loses focus whenever I start typing. If I remove value from the dependencies array, the editor keeps its focus, but then my form’s state is not properly synchronized. How can I make this work so that the editor doesn’t lose focus but also stays in sync with the form's value?

interface Props {
    value?: string;
    onChange?: (value: string) => void;
}

const TipTapEditor = ({ value, onChange }: Props) => {
    const editor = useEditor(
        {
            content: cleanText(value || ''),
            onUpdate: ({ editor }) => {
                onChange?.(editor.getHTML());
            },
        },
        [value] // Removing 'value' fixes focus but breaks state sync.
    );
};

export default TipTapEditor;

I use it within a Controller from React-Hook-Form like this:

<Controller
    control={control}
    name="my-name"
    render={({ field: { value, onChange } }) => (
        <TipTapEditor value={value} onChange={onChange} />
    )}
/>
Share Improve this question asked Feb 17 at 15:46 cantCsharpcantCsharp 11 bronze badge New contributor cantCsharp is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct.
Add a comment  | 

1 Answer 1

Reset to default 0

Looks like there are some other issues related to this also: https://github/ueberdosis/tiptap/discussions/3196

This is how I solved it:

useEffect(() => {
    if (!(editor && value && value !== editor.getHTML())) return

    editormands.setContent(value)
}, [value, editor])

发布评论

评论列表(0)

  1. 暂无评论