tiptap/packages/react/src/useEditor.ts
SavKS 8e65c20815
Fix state update after component unmounted (#2857)
Co-authored-by: Andrii Savluk <a.savluk@ideil.com>
2022-06-24 17:46:54 +02:00

41 lines
871 B
TypeScript

import { EditorOptions } from '@tiptap/core'
import { DependencyList, useEffect, useState } from 'react'
import { Editor } from './Editor'
function useForceUpdate() {
const [, setValue] = useState(0)
return () => setValue(value => value + 1)
}
export const useEditor = (options: Partial<EditorOptions> = {}, deps: DependencyList = []) => {
const [editor, setEditor] = useState<Editor | null>(null)
const forceUpdate = useForceUpdate()
useEffect(() => {
let isMounted = true
const instance = new Editor(options)
setEditor(instance)
instance.on('transaction', () => {
requestAnimationFrame(() => {
requestAnimationFrame(() => {
if (isMounted) {
forceUpdate()
}
})
})
})
return () => {
instance.destroy()
isMounted = false
}
}, deps)
return editor
}