Одним из решений может быть включение className
prop, см. В официальной документации: styling-any-components .Я не могу открыть вашу ссылку, чтобы посмотреть, сработает ли это.
Вторым решением было бы передать цвета в качестве реквизита в BaseComponent
и иметь цвета по умолчанию те, которые BaseComponent
нужно:
const { openColor = "cyan", closedColor = "orange" } = this.props;
return (
<StyledBaseComponent
isOpen={isOpen}
onClick={() => this.toggleOpen()}
openColor={openColor}
closedColor={closedColor}
>
isOpen - {String(isOpen)}
</StyledBaseComponent>
)
Итак, в ExtendedComponent
export function ExtendedComponent() {
return <BaseComponent openColor="pink" closedColor="yellow" />;
}
пример здесь
Другое возможное решение будет передавать стилизованный компонент как опору в BaseComponent
.Примерно так:
const StyledBaseComponent = styled.button`
background-color: ${({ isOpen }) => (isOpen ? "cyan" : "orange")};
`;
const StyledExtendedComponent = styled(StyledBaseComponent)`
background-color: ${({ isOpen }) => (isOpen ? "pink" : "yellow")};
`;
function App() {
return (
<div className="App">
<BaseComponent MyButtom={StyledBaseComponent} />
<BaseComponent MyButtom={StyledExtendedComponent} />
</div>
);
}
и в BaseComponent
render() {
const { isOpen } = this.state;
const { MyButtom } = this.props;
return (
<MyButtom isOpen={isOpen} onClick={() => this.toggleOpen()}>
isOpen - {String(isOpen)}
</MyButtom>
);
}
см. Пример здесь .Вы можете достичь того же, используя крючки.