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

时间:2018-05-09 16:40:08

标签: javascript css 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;

主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;

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

1 个答案:

答案 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>