【问题标题】:How can i extract and combine inline css style properties如何提取和组合内联 CSS 样式属性
【发布时间】:2019-08-19 15:02:45
【问题描述】:

我读了几个答案,他们似乎都假设你有一个包含 CSS 而不是单个属性的对象,我尝试了答案,但我无法让它工作,我想知道什么是错的,什么是最好的方法,这是我到目前为止所做的:

import React from 'react';
import FormLabel from '@material-ui/core/FormLabel';

const label = (props) => {
    // <label onClick={props.onClick} className={props.className + ' ' + props.gridClass} style={props.inlineStyle} >{props.label}</label>
    let divStyleArray = [];

    if (typeof props.inlineStyle.background !== 'undefined') {        
        divStyleArray.push(props.inlineStyle.background)
        delete props.inlineStyle.background
    }

    if (typeof props.inlineStyle.textAlign !== 'undefined') {
        divStyleArray.push(props.inlineStyle.textAlign)
        delete props.inlineStyle.textAlign
    }

    const customStyle = {
        width: '100%'
    }

    const divStyle = Object.assign({}, ...divStyleArray);

    return (
        <div className={props.gridClass} style={{divStyle}}>
            <FormLabel component="label" onClick={props.onClick} style={{ ...customStyle, ...props.inlineStyle }}>{props.label}</FormLabel>
        </div>
    )
}


export default label;  

我的目标是提取几个CSS 属性,将其提供给div,然后将其余部分提供给div 中的内容
01 更新:
我尝试了给出的答案,但它似乎无法正常工作,这就是我所做的:

import React from 'react';
import FormLabel from '@material-ui/core/FormLabel';

const label = (props) => {
    let inlineStyle = {
        ...props.inlineStyle
    }

    const divStyle = {
        background: inlineStyle.background,
        textAlign: inlineStyle.textAlign,
    }

    delete inlineStyle.background;
    delete inlineStyle.textAlign;

    const customStyle = {
        width: '100%'
    }    

    return (
        <div className={props.gridClass} style={divStyle}>
            <FormLabel component="label" onClick={props.onClick} style={{ ...customStyle, ...inlineStyle }}>{props.label}</FormLabel>
        </div>
    )
}

export default label;

【问题讨论】:

    标签: javascript css reactjs


    【解决方案1】:

    首先,据我所知,从 props 对象中删除内容是反模式,或者至少是不好的做法。

    如果您只需要在那里使用的两个属性,则可以使用以下代码:

    const label = (props) => {
        let divStyle = {
            background: props.background,
            textAlign: props.textAlign,
        };
    
        const customStyle = {
            width: '100%'
        }
        return (
            <div className={props.gridClass} style={{divStyle}}>
                <FormLabel
                    component="label"
                    onClick={props.onClick}
                    style={{
                      ...customStyle,
                      ...props.inlineStyle,
                      background: undefined,
                      textAlign: undefined,
                    }}
                >{props.label}</FormLabel>
            </div>
        )
    }
    

    【讨论】:

    • props.backgroundtextAlign 可以是未定义的,会不会造成问题?
    • 否,因为这两个属性将在 divStyle 对象中设置为未定义,然后在 div 元素的样式属性中被忽略,因为它们未设置。
    • 对不起,我没有机会早点尝试你的答案,我今天做了,它似乎不能正常工作,我用我写的新代码更新了问题,请采纳看看有什么问题,谢谢。
    • 能否请您检查Update 01,看看为什么您的答案不起作用?如果您能做到这一点,我将不胜感激,我也会接受您的回答,谢谢。
    • 就我而言,Update 01 中的代码应该可以工作,但也可能存在 css unstading 问题。如果您为周围的 div 设置了背景颜色,则如果未为其设置背景颜色,则表单标签将获得相同的背景颜色。
    猜你喜欢
    • 2012-03-05
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 2012-01-15
    • 2020-12-03
    • 2016-09-01
    • 2013-12-06
    • 2020-03-19
    相关资源
    最近更新 更多