1
0
mirror of https://github.com/ianstormtaylor/slate.git synced 2025-08-11 17:53:59 +02:00

Only use Slate Provider's value prop as initial state (#4540)

* Only use value prop as initial state

* Add onChange call back

* add changeset
This commit is contained in:
Bryan Haakman
2021-10-12 02:38:02 +02:00
committed by GitHub
parent c29eea022e
commit 11ef83b47f
2 changed files with 10 additions and 5 deletions

View File

@@ -0,0 +1,5 @@
---
'slate-react': minor
---
The Slate Provider's "value" prop is now only used as initial state for editor.children as was intended before. If your code relies on replacing editor.children you should do so by replacing it directly instead of relying on the "value" prop to do this for you.

View File

@@ -19,8 +19,8 @@ export const Slate = (props: {
onChange: (value: Descendant[]) => void
}) => {
const { editor, children, onChange, value, ...rest } = props
const [key, setKey] = useState(0)
const context: [ReactEditor] = useMemo(() => {
const [context, setContext] = React.useState<[ReactEditor]>(() => {
if (!Node.isNodeList(value)) {
throw new Error(
`[Slate] value is invalid! Expected a list of elements` +
@@ -35,12 +35,12 @@ export const Slate = (props: {
editor.children = value
Object.assign(editor, rest)
return [editor]
}, [key, value, ...Object.values(rest)])
})
const onContextChange = useCallback(() => {
onChange(editor.children)
setKey(key + 1)
}, [key, onChange])
setContext([editor])
}, [onChange])
EDITOR_TO_ON_CHANGE.set(editor, onContextChange)