svelte-preprocess-react icon indicating copy to clipboard operation
svelte-preprocess-react copied to clipboard

Add support for dynamic components

Open bfanger opened this issue 3 years ago • 3 comments

The following snippet doesn't work:

<script lang="ts">
import  ComponentX from "react-libx"
import  ComponentY from "react-liby"

export let condition: boolean;

$: Component = condition ? ComponentX : ComponentY;
</script>

<react:Component />

bfanger avatar Sep 17 '22 12:09 bfanger

This would also make dynamic imports simpler, as far as I can tell. i.e.

<script lang="ts">
  import { onMount } from "svelte";

  let Comp;
  onMount(async () => {
    Comp = (await import('some-component')).default;
  });
</script>

<react:Comp />

mermail avatar Feb 02 '23 13:02 mermail

@mermail As workaround you could use React's lazy utility:

<script lang="ts">
  import { browser } from "$app/environment";
  import { lazy } from "react";

  const Comp = lazy(() => import("some-component"));
</script>

{#if browser}
  <react:Comp />
{/if}

Needs the browser check because lazy doesn't work with React's renderToString (Used in SSR)

bfanger avatar Feb 04 '23 15:02 bfanger

Cheers, thanks @bfanger

mermail avatar Feb 08 '23 01:02 mermail