没有context = module脚本标签的预加载功能

时间:2019-10-30 14:41:14

标签: javascript preload svelte sapper svelte-3

由于我不喜欢单个JS中的两个脚本标签。我在preload()中移动了<script>函数而没有context=module。一切正常。我想知道它带来的错误。

1 个答案:

答案 0 :(得分:1)

通过context=module脚本标签,您可以为组件定义种类的“实例”。我可以看到使用它的三个主要原因:

  1. 您可以定义其他组件可以导入的功能或其他代码。通常,最好将其放在单独的JS / TS文件中,但是,有时候确实有道理。
  2. 您可以为该组件的所有实例定义只能定义一次的状态。例如,您可以创建一个计数器组件,用相同的值更新所有其他实例。 注意:最好使用商店来实现此功能。
  3. 您可以定义每个组件只能发生一次的逻辑,并且在技术上可以在创建组件之前使用。 (这与点1混合在一起)。

我认为将preload函数移出模块脚本标记不会允许在生成页面组件之前进行预加载。因此,从本质上讲,将创建组件并调用preload函数,这会在数据返回后导致重新呈现。如果预加载位于模块脚本标记中,则将其提取以便创建第一个渲染。

这是我自己的有根据的推测,不一定是事实。

请参阅文档here