有啥方法可以将状态变量导出/传递到 ReactJS 中的外部 CSS 文件

Posted

技术标签:

【中文标题】有啥方法可以将状态变量导出/传递到 ReactJS 中的外部 CSS 文件【英文标题】:Is there any way to export/pass a state variable to an external CSS file in ReactJS有什么方法可以将状态变量导出/传递到 ReactJS 中的外部 CSS 文件 【发布时间】:2020-12-08 08:55:27 【问题描述】:
const Dropdown = ( options, selected, onSelectedChange ) => 
    const [ open, setopen ] = useState(false);


    const renderedOptions = options.map((option) => 
        if (option.value === selected.value) 
            return null;
        

        return (
            <div key=option.value className="item" onClick=() => onSelectedChange(option)>
                option.label
            </div>
        );
    );

    return (
        <div className="ui form">
            <div className="field">
                <label className="label">Select a color</label>
                <div onClick=() => setopen(!open) className=`ui selection dropdown $open ? 'visible active' : ''`>
                    <i className="dropdown icon" />
                    <div className="text">selected.label</div>
                    <div className=`menu $open ? 'visible transition' : ''`>renderedOptions</div>
                </div>
            </div>

            //Here is the selected.value state (value contains string of color name
            <div style= color: `$selected.value` >selected.value</div>
        </div>
    );
;

export default Dropdown;

const options = [
    
        label: 'The Color Red',
        value: 'red'
    ,
    
        label: 'The Color Green',
        value: 'green'
    ,
    
        label: 'The Color Blue',
        value: 'blue'
    
];

如何在外部 CSS 文件中使用 selected.value

selected.value 中的数据是一串颜色名称。

【问题讨论】:

【参考方案1】:

使用 CSS 样式表的另一种方式。 通常,当我需要传递一个值以将其用于 CSS 时,我会 选择特定的 CSS 类,因为我更喜欢使用样式表 出于可伸缩性原因 & 易于访问。如果它可以帮助...

我。已知值大小写/无需转换成word 期望(似乎应该是[蓝色,红色,绿色])

  <div className =  selected.value  />

二。需要转成word 假设您需要更改一个可以是十六进制值的 selected.value,您需要关联一个稍后可用于 CSS 的单词 className。这只是一个示例,您可以执行传递的表达式中的更多内容

  // convert anticipated value to the word you need
  const colors = '#F00': 'red', '#0F0' : green, '#00F': 'blue';
  <div className =  colors[ selected.value ]  />

?应用示例

  import './style.css' // style.css as same level of your component

  const Dropdown = (options,...) => 
    // if need to make wording *(cf:. case )
    // const color = '#F00': 'red', '#0F0' : green, '#00F': 'blue';

    //...
    return (
        //...
        // if need to make wording *(cf:. case )
        // <div className =  colors[ selected.value ] >  selected.value  </div> */ 
        <div className =  selected.value >  selected.value  </div>
     )
    

适用于上述情况的 CSS

/*CSS file: style.css*/
.red  ...code... 
.green  ...code... 
.blue  ...code... 

【讨论】:

【参考方案2】:

这是我使用 URL 中的概念解决它的方法

import styles from './colorchange.css';

//...

//For setting default value (and closing dropdown when clicked outside)
useEffect(() => 
        document.body.addEventListener('click', (event) => 
            if (ref.current.contains(event.target)) 
                return;
            
            setopen(false);
        );

        document.documentElement.style.setProperty(`--variablename`, selected.value);
    , []);

//...

//inside renderedoption
return (
            <div
                key=option.value
                className="item"
                onClick=() => 
                    onSelectedChange(option);
                    document.documentElement.style.setProperty(`--variablename`, option.value);
                
            >
                option.label
            </div>
        );

//....
//for printing the color
<div className="colorcolor">This text is: selected.value</div>

CSS FILE:

 
    --variablename: default;


.colorcolor 
    color: var(--variablename);



【讨论】:

【参考方案3】:

如果您正在寻找样式化组件,您可能可以使用它,这只是一个示例,没有经过深思熟虑。该组件可以在另一个文件中

const HoveredLink = styled.span`
    color: $props => props.selected ? 'black' : 'rgb(150, 153, 156)';
`

<HoveredLink selected=\\someconditionhere > Hover me <HoveredLink/> 

【讨论】:

【参考方案4】:

您可以简单地用作变量,这不完全是 CSS。所以这个应该可以工作:

<div style=color: selected.value > selected.label  </div>

您也可以将样式设置为新变量:

const Dropdown = (options,...) => 
    const styleDiv = 
        color: options.value
    
    //...
    return (
        //...
        <div style=styleDiv> options.label </div>
    )

【讨论】:

以上是关于有啥方法可以将状态变量导出/传递到 ReactJS 中的外部 CSS 文件的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法将变量从 ReactJS 传递到 CSS 样式表?

使用 GET 路由将变量从 ReactJS 前端传递到 NodeJS 后端

有啥方法可以将变量传递给 django 元类?

Reactjs - 将状态值从一个组件传递到另一个组件

ReactJS:为啥将组件初始状态传递给一个反模式?

如何使用我使用 fetch API 调用检索到的数据更新 Reactjs 状态?