#reactjs
#reactjs
Вопрос:
Итак, я создал этот компонент button, используя следующий код
const STYLES = ['btn--primary', 'btn--outline', 'btn--test'];
const SIZES = ['btn--medium', 'btn--lar&e'];
const DISPLAY = ['btn--show', 'btn--hidden'];
export const Button = ({
children,
type,
onClick,
buttonStyle,
buttonSize,
buttonDisplay
}) =&&t; {
const checkButtonStyle = STYLES.includes(buttonStyle)
? buttonStyle
: STYLES[0];
const checkButtonSize = SIZES.includes(buttonSize) ? buttonSize : SIZES[0];
const checkButtonDisplay = DISPLAY.includes(buttonDisplay)
? buttonDisplay
: DISPLAY[0];
return (
<Link to='/si&n-up'&&t;
<button
className={`btn ${checkButtonStyle} ${checkButtonSize} ${checkButtonDisplay}`}
onClick={onClick}
type={type}
&&t;
{children}
</button&&t;
</Link&&t;
);
Итак, у меня есть этот компонент button внутри моего компонента navbar, а также у меня есть он внутри компонента раздела моей домашней страницы.
Моя проблема в том, что всякий раз, когда я уменьшаю страницу до mobile, я хочу, чтобы компонент button на панели навигации отображал: none, а затем в разделе home я хочу, чтобы он отображался
В итоге получается так, что, поскольку это компонент, любой стиль CSS, который я добавлю к нему, перейдет на любую другую страницу, использующую компонент, так что в основном моя кнопка исчезает в разделе домашней страницы, когда мне нужно ее отобразить
Я попытался добавить идентификатор к компоненту button, но это не сработало
<Button id='nav-btn' buttonStyle='btn--outline'&&t;
SIGN UP
</Button&&t;
и я не знаю, как бы я добавил пользовательский класс или идентификатор к кнопке navbar, не применяя его ко всем другим компонентам button на моей домашней странице
Ответ №1:
Скройте это выражением, например, { showButton amp;amp; <Button /&&t; }.
если showButton
значение true, вы увидите кнопку, если нет, то ее не будет.
Если вы хотите сделать это с помощью CSS, используйте медиа-запрос, чтобы установить display: none
, на каком размере экрана он должен исчезать.
Отредактируйте в ответ на комментарий
@media (max-hei&ht: 960px) {
display: none;
}
Который гласит: «Если высота меньше 960px
, установите это свойство».
Если вам нужна «специальная» кнопка, которая скрывается на экране определенного размера, создайте компонент более высокого порядка, который закрывает вашу кнопку.
const NinjaButton =&&t; () =&&t; {
// do stuff
return <Button cssOverrideProp={cssWithMediaQueryThatHides} /&&t;
}
В Button
вы можете условно применить этот css,
className=`{/* your other css */ ${cssOverrideProp || ''}}`
Затем вы можете использовать эту кнопку везде, где она должна скрываться.
Комментарии:
1. итак, я написал некоторый код, который позволяет мне добавить определенный класс, который показывает или скрывает кнопку, но теперь моя проблема заключается в том, что она исчезает только при 960px. Я не уверен, как реализовать этот код
2. Исчезает меньше , чем 960 пикселей?
3. да, потому что прямо сейчас у меня есть этот код ` <Button buttonDisplay=’btn—hidden’ ButtonStyle =’btn—outline’&&t;` и в основном моя логика заключается в том, что если у кнопки есть значение buttonDisplay, установите его равным btn—hidden , но оно скрывает его на любом размере экрана, поэтому мне нужно, чтобы оно скрывалось только на экране размером меньше 960 пикселей
4. но как мне добавить определенный медиа-запрос css к компоненту button, который имеет классы по умолчанию? потому что idk, как настроить таргетинг только на компонент navbar button? Когда я выполнял медиа-запрос, он скрывал все кнопки на моем сайте, а не ту, которую я хочу
5. проверьте код, который я добавил выше. Он показывает мою логику для моего компонента button, и прямо сейчас я добавил свойство checkButtonDisplay , но моя проблема в том, что оно скрывает кнопку на всех экранах и Idk, как написать код, чтобы она исчезла только на 960px