1. ホーム
  2. reactjs

[解決済み] スタイル付きコンポーネントの条件付きレンダリング

2023-01-04 14:27:19

質問

Reactのstyled-componentsで条件付きレンダリングを使って、ボタンクラスをactiveにするにはどうしたらよいでしょうか?

cssではこれと似たような感じでやります。

<button className={this.state.active && 'active'}
      onClick={ () => this.setState({active: !this.state.active}) }>Click me</button>

スタイル付きコンポーネントで、クラス名に'&&'を使おうとすると、嫌がられます。

import React from 'react'
import styled from 'styled-components'

const Tab = styled.button`
  width: 100%;
  outline: 0;
  border: 0;
  height: 100%;
  justify-content: center;
  align-items: center;
  line-height: 0.2;
`

export default class Hello extends React.Component {
  constructor() {
    super()
    this.state = {
      active: false
    }  
    this.handleButton = this.handleButton.bind(this)
}

  handleButton() {
    this.setState({ active: true })
  }

  render() {
     return(
       <div>
         <Tab onClick={this.handleButton}></Tab>
       </div>
     )
  }}

どのように解決するのですか?

単純に次のようにすればよいでしょう。

<Tab active={this.state.active} onClick={this.handleButton}></Tab>

そして、スタイルにはこのようなものを。

const Tab = styled.button`
  width: 100%;
  outline: 0;
  border: 0;
  height: 100%;
  justify-content: center;
  align-items: center;
  line-height: 0.2;

  ${({ active }) => active && `
    background: blue;
  `}
`;