reactjs - 如何将自定义 CSS 添加到我的 React 组件并覆盖默认 CSS 值?
问题描述
我的按钮有一个组件,它有自己的 css 文件,但我试图弄清楚如何将 className 直接添加到组件并更改移动视图的 CSS。现在,Button.css 文件覆盖了所有内容,我添加到组件中的新 className 甚至没有显示在 html 中。
这是 Button.js 文件
import React from 'react';
import './Button.css'
const STYLES = [
'btn--primary',
'btn--outline'
]
const SIZES = [
'btn--medium',
'btn--large'
]
export const Button = ({
children,
type,
onClick,
buttonStyle,
buttonSize
}) => {
const checkButtonStyle = STYLES.includes(buttonStyle) ? buttonStyle : STYLES[0]
const checkButtonSize = SIZES.includes(buttonSize) ? buttonSize : SIZES[0]
return (
<button className={`btn ${checkButtonStyle} ${checkButtonSize}`} onClick={onClick} type={type}>
{children}
</button>
)
}
这是 Button.css
:root {
--primary: #3acbf7;
}
.btn {
padding: 8px 20px;
border-radius: 4px;
outline: none;
border: none;
cursor: pointer;
}
.btn:hover {
background-color: transparent;
color: #fff;
padding: 8px 20px;
border-radius: 4px;
border: solid 2px var(--primary);
transition: all 0.3s ease-out;
}
.btn--primary {
background-color: var(--primary);
}
.btn--outline {
background-color: transparent;
color: #fff;
padding: 8px 20px;
border-radius: 4px;
border: solid 1px var(--primary);
transition: all 0.3s ease-out;
}
.btn--medium {
padding: 8px 20px;
border-radius: 4px;
font-size: 18px;
color: #fff;
}
.btn--large {
padding: 12px 26px;
border-radius: 4px;
font-size: 20px;
color: #fff;
}
这是我尝试添加自定义类名来覆盖上面代码的主要组件。请注意,此代码位于 Navbar 组件内。
import React, { Component } from 'react';
import { MenuItems } from "./MenuItems"
import { Button } from "../Button"
import './Navbar.css'
class Navbar extends Component {
render() {
return (
<nav className="NavbarItems">
<Button className="btn-mobile">Sign Up</Button>
</nav>
)
}
}
如果我尝试将 .btn-mobile 添加到我的 Navbar.css,则 html 中不会显示任何属性。我试图添加一个ID,但仍然没有工作。不确定如何自定义按钮,因为它是具有预设属性的组件
解决方案
我通常实现这一点的方式是接受className
作为道具并将其传播到元素的默认类中,如下所示:
const Button = ({className='', text, ...rest}) => (
<button className={`my-button-class ${className}`} {...rest}>{text}</button>
)
然后你可以像这样使用它:
<Button className="my-custom-class" text="press me" id="my-id" />
它会呈现为
<button class="my-button-class my-custom-class" id="my-id">press me</button>
通过将 prop 默认为className
空字符串,"undefined"
如果实现未通过className
. 请注意,我们还传播了通过的任何其他道具。
推荐阅读
- subquery - Couchbase N1QL 查询与使用 USE KEYS 连接的子查询
- google-cloud-platform - 从单个 Google Compute Engine 中删除默认防火墙规则
- vbscript - 如何在 VBScript 变量中设置日文字符(UTF-8)
- google-apps-script - Google Sheets - Track and Log highest value of other (dynamic) cell
- javascript - 用Jquery将TD标签放入对象?
- tags - Storage System for NFC Cards
- python - 间隔比较不适用于 if 语句 - python
- firebase - How can I get my Firebase Data into React-Native Map Marker instead of a Flatlist
- google-apps-script - 如何将 .getMergedRanges() 从字符串更改为范围?
- javascript - why can't we add object property names using template strings