diff --git a/.changeset/small-timers-sin.md b/.changeset/small-timers-sin.md
new file mode 100644
index 000000000..5d67d3550
--- /dev/null
+++ b/.changeset/small-timers-sin.md
@@ -0,0 +1,5 @@
+---
+'slate-react': patch
+---
+
+Fixes #5335. To prevent performance issues, make sure to wrap custom `renderPlaceholder` values in `useCallback`.
diff --git a/packages/slate-react/src/components/editable.tsx b/packages/slate-react/src/components/editable.tsx
index 448025b1b..20672e46a 100644
--- a/packages/slate-react/src/components/editable.tsx
+++ b/packages/slate-react/src/components/editable.tsx
@@ -129,6 +129,10 @@ export type EditableProps = {
*/
export const Editable = (props: EditableProps) => {
+ const defaultRenderPlaceholder = useCallback(
+ (props: RenderPlaceholderProps) => ,
+ []
+ )
const {
autoFocus,
decorate = defaultDecorate,
@@ -137,7 +141,7 @@ export const Editable = (props: EditableProps) => {
readOnly = false,
renderElement,
renderLeaf,
- renderPlaceholder = props => ,
+ renderPlaceholder = defaultRenderPlaceholder,
scrollSelectionIntoView = defaultScrollSelectionIntoView,
style: userStyle = {},
as: Component = 'div',