bugfix: moves EDITOR_TO_ON_CHANGE.set(editor, onContextChange) into useEffect #5261
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
With Strict Mode starting in React 18, whenever a component mounts in development, React will simulate immediately unmounting and remounting the component. This change in behavior results in the
EDITOR_TO_ON_CHANGE
map getting set to aNoOp
function due to the unmount call and does not reset to the correct callback function until the next state change happens within theSlate
component.The fix for this is to put
EDITOR_TO_ON_CHANGE.set(editor, onContextChange)
intouseEffect
so that the correctonContextChange
callback gets added back into theEDITOR_TO_ON_CHANGE
map when effects get re-created on a mounted component.Link to read more about this change in React 18.
Example
This is what the
EDITOR_TO_ON_CHANGE
callbacks look like within the lifecycle before the fix:After the fix:
Checks
yarn test
.yarn lint
. (Fix errors withyarn fix
.)yarn start
.)yarn changeset add
.)