Вот фрагмент кода реакции того, как я закодировал всплывающую подсказку, чтобы иметь светлую и темную тему.Он определяет положение всплывающей подсказки.Я хочу подойти к этому по-другому, используя темы, но я не уверен, как:
static defaultProps = {
theme: 'light',
eventsEnabled: true,
};
firstOrderPlacement(placement) {
if (!placement) return null;
return placement.split('-')[0];
}
arrowDirectionClass(firstOrderPlacement) {
const { theme } = this.props;
switch (firstOrderPlacement) {
case 'right':
return cx(css.arrowLeft, theme === 'dark' ? css.arrowLeftDark : css.arrowLeftLight);
case 'left':
return cx(css.arrowRight, theme === 'dark' ? css.arrowRightDark : css.arrowRightLight);
case 'top':
return cx(css.arrowDown, theme === 'dark' ? css.arrowDownDark : css.arrowDownLight);
case 'bottom':
return cx(css.arrowUp, theme === 'dark' ? css.arrowUpDark : css.arrowUpLight);
default:
return cx(css.arrowUp, theme === 'dark' ? css.arrowUpDark : css.arrowUpLight);
}
}
и css для его позиций:
.backgroundLight {
background: white;
color: #262626;
}
.backgroundDark {
background: #2d2d2d;
color: #ffffff;
}
.arrow {
position: relative;
width: 0;
height: 0;
}
.arrowRight {
border-top: 0.4375rem solid transparent;
border-bottom: 0.4375rem solid transparent;
}
.arrowRightLight {
border-left: 0.4375rem solid var(--color-white);
}
.arrowRightDark {
border-left: 0.4375rem solid #2d2d2d;
}
.arrowLeft {
border-top: 0.4375rem solid transparent;
border-bottom: 0.4375rem solid transparent;
}
.arrowLeftLight {
border-right: 0.4375rem solid var(--color-white);
}
.arrowLeftDark {
border-right: 0.4375rem solid #2d2d2d;
}
.arrowDown {
margin: 0 auto;
border-left: 0.4375rem solid transparent;
border-right: 0.4375rem solid transparent;
}
.arrowDownLight {
border-top: 0.4375rem solid var(--color-white);
}
.arrowDownDark {
border-top: 0.4375rem solid #2d2d2d;
}
.arrowUp {
margin: 0 auto;
border-left: 0.4375rem solid transparent;
border-right: 0.4375rem solid transparent;
}
.arrowUpLight {
border-bottom: 0.4375rem solid var(--color-white);
}
.arrowUpDark {
border-bottom: 0.4375rem solid #2d2d2d;
}
Конечно, это может быть эффективно сделано с помощью тем, ноЯ читал об этом, я не уверен, как это сделать.