reactjs 将变量从tsx读取到scss文件

fnvucqvd  于 2023-02-22  发布在  React
关注(0)|答案(2)|浏览(334)

我需要在模具中的颜色是动态的自定义组件。任何方式从tsx的变量值和访问它的scss文件。
代码如下所示。
https://stackblitz.com/edit/stenicil-starter-component-oeyzhz?file=src%2Fcomponents%2Fmy-component%2Fmy-component.tsx&file=src%2Fcomponents%2Fmy-component%2Fmy-component.css

k2fxgqgv

k2fxgqgv1#

您在运行时能够读取的唯一样式变量是CSS custom properties
中央支助组/中央支助组:

:root {
   --foo-bar: red;
}

联合秘书处/技术秘书处:

var bodyStyles = window.getComputedStyle(document.body);
var fooBar = bodyStyles.getPropertyValue('--foo-bar'); //get red
fv2wmkja

fv2wmkja2#

正如@matthieu-riegler所指出的,你需要的是CSS自定义属性,如果你只需要CSS中的值,一种方法是让组件的用户直接用元素的自定义属性设置颜色(例如<my-component style="--color: #003366"></my-component>),然后你就可以在CSS中使用它了:

.element {
  background-color: var(--color);
}

如果你还需要JS中的值(或者发现在元素上设置一个属性/特性更好,不管什么原因),那么你也可以反过来,而不是在CSS中定义颜色并从JS中读取:

import { Component, State, Host } from '@stencil/core';

export class MyComponent {
  @State() color = 'red';

  render() {
    return (
        <Host style={{'--color': this.color}}>
            <div>Hello, World!</div>
        </Host>
    );
  }
}

注:
1.我用@State()修饰了color,使其值具有React性(即,每当color的值发生变化时,就会调用render()函数)。
1.我使用<Host>功能组件设置主机元素的属性(在本例中为<my-component>)。
1.我在宿主元素上定义了一个CSS自定义属性,你也可以把它应用到子元素上。

相关问题