在 stenciljs @component 装饰器中使用变量和/或异步变量

问题描述 投票:0回答:1

我什至不确定这在技术上是否可行,更不用说建议了,但我想我会问。

是否可以在 stenciljs @Component 装饰器中使用变量或函数的结果?

我想做的是使用 fetch 从 CDN 获取样式表,然后将其应用到我的组件。 我知道有几种不同的方法可以做到这一点,并且我开始想知道这是否可能。 我的猜测是事实并非如此。 我在想类似的事情:

@Component( {
  tag: 'my-component',
  styles: await getMyStylesheet(),
  shadow: true
} )

其中 getMyStylesheet() 是一个类似以下的函数:

public async getMyStylesheet(): Response<string> {
  const r = await fetch('https://my.cdn/file.css');
  const data = await r.text();
  return Promise.resolve(data ?? '');
}

甚至不确定该函数将位于何处。不在我的组件的类中或在装饰器之前。 也许在另一个文件中并导入???

事实上,我只是使用

@State() myCSS = '';
async componentWillLoad(): Promise<boolean> {
  const r = await fetch('https://my.cdn/file.css');
  const data = await r.text();
  this.myCSS = data ?? '';
  return Promise.resolve(true);
}

render() {
  return (
    <style>{this.myCSS}</style>
  )
}

这似乎运作良好。 但我很好奇并认为有人可能肯定知道。

stenciljs
1个回答
0
投票

我认为最好的方法是从index.html导入样式表:

<head>
      <title>Your App</title>
      <link rel="stylesheet" href="https://my.cdn/file.css" />
</head>

如果您希望它特定于您的组件或者您无权访问根 html,您可以在渲染函数中以这种方式添加它:

render() {
    return (
        <div>
            <link rel="stylesheet" href="https://my.cdn/file.css" />
        <p>Your component content goes here</p>
        </div>
    );
}
© www.soinside.com 2019 - 2024. All rights reserved.