我有一个我希望在reactJs中重复使用的按钮组件,我想要渲染多个相同的组件,但是使用不同的样式并在按下按钮时使用不同的样式,还有鼠标HoverOver
按钮组件是: -
import React, { Component } from 'react';
//import './Buttons.css'
const buttons = (props) => {
return (
<div className="">
<button id="buttons" class="-"> {props.name}</button>
</div>
);
}
export default buttons;
主App组件保持一个状态,然后状态显示Button的名称,我相信有更好的方法。
此外,我已经创建了多个按钮组件,我可以通过这种方式应用css样式,但我确信这不是正确的方法。
class App extends Component {
state = {
name: [
{ button: 'Login' },
{ buttonTwo: 'Sign Up' },
{ buttons: 'Login' }
],
}
render() {
const style = {
backgroundColor: 'blue',
font: 'inherit',
border: '1px solid red',
padding: '8px',
};
var pressed = true
function toggle() {
pressed = !pressed
//When pressed Styles change
}
return (
<div className="App">
{/* <Right /> Temp Disabled*/}
<span><Button pressed={pressed} defaultPressed={true} pressedStyle={{color: 'blue'}}
name={this.state.name[0].button} /></span>
<span><Button name={this.state.name[1].buttonTwo} /></span>
</div>
);
}
}
export default App;
我最终的目标是创建一个登录部分,以便这些按钮成为其中的一部分。
答案 0 :(得分:1)
为什么不使用CSS并使用原生:active
和:hover
伪类处理“鼠标HoverOver”和“按钮”?如果你的样式将在CSS中,那么你可以只传递一些字符串作为参数(例如className
)并在.css
文件中定义必要的样式
例如
class Application extends React.Component {
render() {
return (
<div className="application-wrapper">
<Button className="red">This is the red button</Button>
<Button className="blue">This is the blue button</Button>
</div>
)
}
}
class Button extends React.Component {
render() {
return (
<button className={`my-awesome-button ${this.props.className}`}>{this.props.children}</button>
)
}
}
ReactDOM.render(<Application />, document.getElementById("kappa"))
.my-awesome-button {
line-height: 40px;
padding: 0 20px;
border: none;
background: black;
color: white;
font-weight: bold;
cursor: pointer;
outline: none;
}
.my-awesome-button:hover {
opacity: .54
}
.my-awesome-button:active {
opacity: .38
}
.my-awesome-button.red {
background: red
}
.my-awesome-button.blue {
background: blue
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="kappa"></div>