【问题标题】:How do you change the color of a React component using props如何使用 props 更改 React 组件的颜色
【发布时间】:2021-07-28 07:05:59
【问题描述】:

在下面的代码中,我在 React 的帮助下创建了一个按钮组件。由于 React 允许您创建可重用的组件,因此我希望能够创建一个可以包含不同文本并具有不同颜色的按钮。例如:

    import React from "react"
    import App from "../GlowButton/GlowButton"
    
    const App= () => {
        return (
            <div className="App"> 
                <GlowButton text="Darth vader" color="red"/>
                <GlowButton text="Yoda" color ="green"/>
                <GlowButton text="Obi Wan Kenobi" color="aqua"/>
            </div>
        )
    }

export default App

我已经让不同的文本部分开始工作,但我不确定如何(或是否可以)更改组件的颜色。

css文件是:

:root {
    --buttonColor: orange; 
}

.glowButton {
    margin: auto 0;
}

.myButton {
    border: none;
    padding: 0.4em 0.8em;
    text-align: center;
    background-color: transparent;
    color: var(--buttonColor);
    letter-spacing: 0.05rem;
    font-family: 'Poppins', sans-serif;
    font-size: 1.1rem;
    border: var(--buttonColor) 0.2em solid ;
    border-radius:  0.45em;
    transition: 0.5s;
    text-shadow: 1px 2px 5px;
    box-shadow: 0 0 0.1em var(--buttonColor), 0 0 0.3em var(--buttonColor);

    &:hover{
        color: black;
        background-color: var(--buttonColor);
        box-shadow: 0 0 0.5em var(--buttonColor), 0 0 0.7em var(--buttonColor), 0 0 1.10em var(--buttonColor);
    }
}

css 文件的样式和细节并不那么重要。关键是它基于 --buttonColor 变量创建了一个按钮。

JS/JSX 部分是:

import React from "react"

import "./GlowButton.scss"

// Properties are color and text 
const GlowButton = (props) => {
    return (
        <inline className="glowButton">
            <button className="myButton">{props.text}</button>
        </inline>
    )
}

export default GlowButton 

从网上看,我发现这部分代码可以选择和更改变量:

// change the button according to users props 
        const root = document.querySelector(':root')
        root.style.setProperty('--buttonColor', COLORCONST)

如果 COLORCONST 设置为单一颜色,则代码可以正常工作,但如果设置为 props.color 则无效,忽略颜色并显示css 文件中的默认橙色。

如果有人能解释我在 props.color 上做错了什么或为什么我不能使用它,那就太好了。

【问题讨论】:

    标签: javascript css reactjs frontend


    【解决方案1】:

    你可以做的是动态附加一个基于颜色的类,

    import React from "react"
    
    import "./GlowButton.scss"
    
    // Properties are color and text 
    const GlowButton = (props) => {
       return (
        <inline className="glowButton">
            <button className={`myButton ${props.color}`}>{props.text}</button>
        </inline>
       )
    }
    
    export default GlowButton 
    

    然后将条件样式添加到您的样式表中,例如,

    .myButton {
    
         //Common Styles Here
    
         &.red {
             //Distinct Styles Here
         }
    
         &.green {
             //Distinct Styles Here
         }
    
         &.aqua {
             //Distinct Styles Here
         }
    }
    

    【讨论】:

    • 如果超过3种颜色怎么办?即,如果我希望用户能够使用任何 rgba(w,x,y,z) 颜色怎么办。超过一百万个条件。
    • 任何主题或反应库都有一个特定范围内的调色板。只需选择你想要的,如果你想要那百万种颜色条件,你可能不得不使用内联样式或一些 npm 库。
    【解决方案2】:

    你需要这样的东西:

    const GlowButton = (props) => {
    return (
        <inline className="glowButton">
            <button className="myButton" style={{color: props.color}}>{props.text}</button>
        </inline>
    )}
    

    【讨论】:

    • 内联样式是最合适的解决方案吗?在我看来,如果有更多的样式,那么使用内联会很快变得杂乱无章。
    • 我认为第二种方法是将颜色名称添加到className并在css中为每个类编写另一种颜色。我不知道第三种方法
    猜你喜欢
    • 1970-01-01
    • 2019-12-05
    • 2017-03-21
    • 1970-01-01
    • 2020-05-01
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    相关资源
    最近更新 更多