Sapper/Svelte - 如何定期获取

tip*_*exx 2 javascript svelte sapper svelte-3

我如何使用 Sapper 定期获取数据?

这是正确的方法吗?

//src/routes/fetch_on_this_page.svelte

<script>
  setInterval(async () => {
    //fetch here
  }, 3000);
</script>
Run Code Online (Sandbox Code Playgroud)

Ric*_*ris 9

最巧妙的方法是在内部完成所有操作onMount

<script>
  import { onMount } from 'svelte';

  onMount(() => {
    async function fetchData() {...}
    
    const interval = setInterval(fetchData, 3000);
    fetchData();

    return () => clearInterval(interval);
  });
</script>
Run Code Online (Sandbox Code Playgroud)

除了创建更少的组件级变量之外,onMount代码不会在服务器端渲染期间运行,因此涉及的工作也更少。如果您需要在多个组件中执行此操作,您还可以将其包装到自定义生命周期函数中:

// poll.js
import { onMount } from 'svelte';

export function poll(fn, ms) {
  onMount(() => {
    const interval = setInterval(fn, ms);
    fn();

    return () => clearInterval(interval);
  });
}
Run Code Online (Sandbox Code Playgroud)
<script>
  import { poll } from './poll.js';

  poll(async function fetchData() {
    // your implementation goes here
  }, 3000);
</script>
Run Code Online (Sandbox Code Playgroud)