How to easily set entire SlateJS editor value using React onEffect hook?
The initial editor value is set when creating the useState hook, however, I want to set a new initial value afterwards.
Currently, we can do that by deleting all elements with Transform and then inserting new elements, but is an easier way, like override all? I can't seem to find it in the SlateJS docs.
Saving to database slatejs example Don't work, but is how my setup functions
const App = () => {
const editor = useMemo(() => withReact(createEditor()), [])
// Update the initial content to be pulled from Local Storage if it exists.
const [value, setValue] = useState(
[
{
type: 'paragraph',
children: [{ text: 'A line of text in a paragraph.' }],
},
]
)
useEffect(() => {
// Get saved SlateJS text from local storage
const savedSlateTextData = getSavedSlateJSData(localStorage)
// In theory, this should set the SlateJS values to the loaded data
// In practice, I think because the editor is immutable outside transform, it don't work
setValue(savedSlateTextData)
}, [])
return (
<Slate
editor={editor}
value={value}
onChange={value => {
setValue(value)
const isAstChange = editor.operations.some(
op => 'set_selection' !== op.type
)
if (isAstChange) {
// Save the value to Local Storage.
const content = JSON.stringify(value)
localStorage.setItem('content', content)
}
}}
>
<Editable />
</Slate>
)
}