Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dynamically loading component using import or fetch

Tags:

svelte

Is there a way to import components in svelte dynamically using fetch or import? May be a svelte file or module file created from shareable component (still don't know how that works). very new with svelte and very excited.

I found some code in stackoverflow, which worked for v2. Here is the link


<button on:click="loadChatbox()">
  chat to a customer service representative
</button>

{#if ChatBox}
  <svelte:component this={ChatBox}/>
{/if}

<script>
  export default {
    methods: {
      async loadChatbox() {
        const { default: Chatbox } = await import('./Chatbox.html');
        this.set({ Chatbox });
      }
    }
  };
</script>
like image 250
ssuwal Avatar asked Jun 03 '19 17:06

ssuwal


People also ask

How do I import component dynamically into React?

In React, dynamically importing a component is easy—you invoke React. lazy with the standard dynamic import syntax and specify a fallback UI. When the component renders for the first time, React will load that module and swap it in.

What is Nextjs dynamic import functionality?

Examples. Next. js supports lazy loading external libraries with import() and React components with next/dynamic . Deferred loading helps improve the initial loading performance by decreasing the amount of JavaScript necessary to render the page.

What are dynamic imports?

Dynamic imports or Code Splitting is the practice of breaking up your JavaScript modules into smaller bundles and loading them dynamically at runtime to improve and increase the performance of your website dramatically.


1 Answers

The same functionality exists in Svelte 3, but you only need to assign the dynamically imported component to a regular variable that you use for the this property on the svelte:component.

Example (REPL)

<!-- App.svelte -->
<script>
  let Chatbox;

  function loadChatbox() {
    import('./ChatBox.svelte').then(res => Chatbox = res.default)
  }
</script>

<button on:click="{loadChatbox}">Load chatbox</button>
<svelte:component this="{Chatbox}" />

<!-- ChatBox.svelte -->
<h1>Dynamically loaded chatbox</h1>
<input />
like image 90
Tholle Avatar answered Oct 14 '22 00:10

Tholle