PrimeReact и Styled-компонент
Я не могу создать стиль компонента PrimeReact с помощью styled-component.
Учитывая приведенный ниже код для визуализации 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;
}
`;
2 ответа
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;
}
`;
PrimeReact имеет много стилей, примененных к отдельной таблице стилей sass, часто объединяя несколько имен классов и HTML-тегов.
Чтобы ваши стили победили, вам нужно больше специфичности CSS.
Решение состоит в том, чтобы использовать вложенный селектор, например:
const ComponentView = styled(Component)`
&&& {
width: 1000px;
}`
Это создаст 3 идентичных имени класса и рекомендуется документами Styled Components. Требуется больше специфичности для имени класса? Используйте больше &
s.
Или вы могли бы положить в !important
, Я видел это вокруг.
Или отредактируйте их файл sass.