javascript – ReactJs重复使用相同的组件但具有不同的样式

我有一个我希望在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;

主应用程序组件保持一个状态,然后状态显示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;

我最终的目标是创建一个登录部分,以便这些按钮成为其中的一部分.

最佳答案 为什么不使用CSS并使用native: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>
点赞