Skip to content

Commit

Permalink
Only use Slate Provider's value prop as initial state (#4540)
Browse files Browse the repository at this point in the history
* Only use value prop as initial state

* Add onChange call back

* add changeset
  • Loading branch information
bryanph authored Oct 12, 2021
1 parent c29eea0 commit 11ef83b
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 5 deletions.
5 changes: 5 additions & 0 deletions .changeset/lovely-goats-argue.md
Original file line number Diff line number Diff line change
@@ -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.
10 changes: 5 additions & 5 deletions packages/slate-react/src/components/slate.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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` +
Expand All @@ -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)

Expand Down

0 comments on commit 11ef83b

Please sign in to comment.