Skip to content

Instantly share code, notes, and snippets.

@mquandalle
Created June 14, 2024 13:16
Show Gist options
  • Save mquandalle/709e2ba691aa6dc6086a40df88bd4f1b to your computer and use it in GitHub Desktop.
Save mquandalle/709e2ba691aa6dc6086a40df88bd4f1b to your computer and use it in GitHub Desktop.
Use a React component in a Svelte 5 component
<script>
import { createElement } from "react";
import { createRoot } from "react-dom/client";
import { onMount, onDestroy } from "svelte";
let container = $state();
let reactRoot = $state();
const { el, children, class: classNames, ...props } = $props();
onMount(() => {
reactRoot = createRoot(container);
});
$effect(() => {
reactRoot.render(createElement(el, props, children));
});
onDestroy(() => {
reactRoot?.unmount();
});
</script>
<div bind:this={container} class={classNames}></div>
@mquandalle
Copy link
Author

Usage

<script>
import ReactAdapter from "$lib/components/ReactAdapter.svelte";
import ReactComponent from "react-library";
</script>

<ReactAdapter
  el={ReactComponent}
  prop1="hello"
  prop2="world"
/>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment