【问题标题】:sveltejs - static properties on componentssveltejs - 组件的静态属性
【发布时间】:2021-01-30 21:38:02
【问题描述】:

我有一个场景,我需要向组件类提供信息,以便下游实例化可以使用该信息。

例如:

import { AComponent } from 'AComponent.svelte'
...
AComponent.classInfo = {something: somedata}

然后,组件可以访问该信息,如下所示:

<script>
  let something = AComponent.classInfo.something
</script>

在这些问题中讨论的 V2(我正在使用 3)中提供这种功能似乎需要付出一些努力:Support Component Static Method #480,这导致了Added setup function which can supply static methods/properties. #572

但是,扫描当前文档并没有发现这样的设置方法。那么,这从 V2 到 3 是否存在?如果没有,有什么方法可以做到这一点?

【问题讨论】:

  • 为什么不创建一个 .js 文件,编写逻辑来为组件生成数据,然后从 js 文件中导入这个变量,在组件中,这样相同的数据将在所有人之间共享组件
  • 是的,我可以做这样的事情,而且我可以。这是在一个外部组件库中,但仍然可以通过添加一个导出“setSomething()”函数的 .js 函数,然后库中的组件可以通过“getSomething()”访问“某物” ' 调用。
  • 现在,我正在使用 sessionStorage 对象解决它。将“某物”存储在 sessionStorage 中,组件可以访问它。
  • 这些方法都不是最优的 - 我宁愿将信息完全封装在组件定义中。

标签: javascript static-methods svelte-3


【解决方案1】:

您可以在模块脚本块中定义不特定于实例的静态属性

<script context="module">
  export const someValue = 123
</script>
<script>
  // Normal component stuff
</script>

然后直接从组件文件中导入:

import { someValue } from './MyComponent.svelte'

请注意,这是该组件的所有实例共享的值。

【讨论】:

  • 在我的情况下,上面示例中缺少分号破坏了 linting,所以我需要添加它以使其正常工作。
【解决方案2】:

至少在 v3.32 版本中,无法在 Svelte 组件中定义静态属性。只有命名的导出是可能的。

我知道的唯一解决方法是使用自定义的 webpack 加载器/汇总插件,但实现从来都不漂亮。

【讨论】:

    猜你喜欢
    • 2021-07-23
    • 2020-01-02
    • 2018-01-24
    • 2019-12-15
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    相关资源
    最近更新 更多