PrimeReact 和样式化组件

Posted

技术标签:

【中文标题】PrimeReact 和样式化组件【英文标题】:PrimeReact and styled-component 【发布时间】:2018-02-26 21:08:36 【问题描述】:

我似乎无法使用 styled-component 设置 PrimeReact 组件的样式。

鉴于下面的代码来呈现一个 InputText,我的意图是改变它的宽度。但它不起作用。

import styled from "styled-components";
import InputText from 'primereact/components/inputtext/InputText';

class Component extends React.Component 
    render() 
        return (
            <InputText/>
        )


const ComponentView = styled(Component)`
    .ui-inputtext 
        width: 1000px;
    
`;

【问题讨论】:

【参考方案1】:

styled-components 生成一个className,应该传递给组件。

import styled from "styled-components";
import InputText from 'primereact/components/inputtext/InputText';

class Component extends React.Component 
    render() 
        return (
            <InputText className=this.props.className /> <---- here
        )


const ComponentView = styled(Component)`
    .ui-inputtext 
        width: 1000px;
    
`;

如果InputText 不接受className,你可以简单地用另一个组件包装它:

import styled from "styled-components";
import InputText from 'primereact/components/inputtext/InputText';

class Component extends React.Component 
    render() 
        return (
            <div className=this.props.className> <---- here
                <InputText />
            </div>
        )


const ComponentView = styled(Component)`
    .ui-inputtext 
        width: 1000px;
    
`;

【讨论】:

【参考方案2】:

PrimeReact 使用单独的 sass 样式表应用了很多样式,通常结合多个类名和 html 标签。

要让您的样式获胜,您需要更多的 CSS 特异性。

一种解决方案是使用嵌套选择器,例如:

const ComponentView = styled(Component)`
&&& 
    width: 1000px;
`

这将生成 3 个相同的类名,这是 Styled Components docs 推荐的。需要更多的类名特异性?多使用&amp;s。

或者您可以输入!important。我见过这个。

或编辑their sass file。

【讨论】:

以上是关于PrimeReact 和样式化组件的主要内容,如果未能解决你的问题,请参考以下文章

故事书未显示样式

覆盖 PrimeReact 样式

为啥我不能将 primereact 样式导入 webpack 4 react 样板?

如何使用 PrimeReact FileUpload 组件上传文件

来自自定义组件的 PrimeReact DataTable 动态列

样式化的组件和范围