#reactjs #styled-components
#reactjs #стилизованные компоненты
Вопрос:
У меня есть стилизованный компонент, который получает некоторые дополнительные стили на основе свойства (active).
Компонент выглядит примерно так:
import styled from 'styled-components';
const Button = styled.button`
color: black;
${props => props.active ? `color: red;` : ''}
`;
В рамках компонентного теста мне нужно выбрать активную кнопку, которая (очевидно) не работает, выполняя следующее:
document.querySelector(Button)
поскольку это нацелено на все компоненты кнопок, независимо от того, активны они или нет.
Я прочитал документацию по стилизованным компонентам и много гуглил. Однако я не смог найти способ передать определенные реквизиты в селектор стилизованных компонентов. Я ожидал чего-то подобного следующему (что не работает).
document.querySelector(Button({ active: true }))
Есть ли какой-нибудь способ добиться этого или, скорее, как выбрать стилизованный компонент, который имеет определенные реквизиты?
Комментарии:
1. В тесте вы пытаетесь подтвердить, что цвет был установлен на
red
? Можете ли вы поделиться тестом?2. Нет, речь идет не о красной, а о отображаемой активной кнопке. Итак, цель состоит в том, чтобы выяснить, есть ли активная кнопка (что невозможно сделать, проверив вычисленные стили этого узла, поскольку он основан на теме и может измениться, что не должно влиять на тест)
Ответ №1:
Я думаю, что нашел решение, которое, вероятно, является «правильным» способом при использовании стилизованных компонентов.
Вместо определения активного стиля с помощью реквизита в компоненте кнопки я создал еще один, который расширяет кнопку. Это, конечно, заставляет меня использовать другой компонент для активной кнопки вместо того, чтобы просто устанавливать активное свойство.
Однако это не так много дополнительной работы, и ее очень легко протестировать. Итак, я решил пойти этим путем.
const Button = styled.button`
color: black;
`;
const ActiveButton = styled(Button)`
color: red;
`;
document.querySelector(ActiveButton);
Ответ №2:
Правильный синтаксис таков:
const Button = styled.button`
color: black;
color: ${props => props.active ? 'red' : ''};
`;