Добавление активного класса со стилизованным компонентом не работает - PullRequest
0 голосов
/ 23 октября 2018

Итак, моя функция:

function onClickChange(props) {
  let MyDiv = document.getElementById('myDIV')
  let InterfaceDesign = document.getElementById('interfaceDesign')
  if (MyDiv.style.display === 'none') {
    MyDiv.style.display = ''
    InterfaceDesign.classList.add('active')
  } else {
    MyDiv.style.display = 'none'
    InterfaceDesign.classList.remove('active')
  }
}

Из этой функции в DOM я вижу, что она получает активный класс.Но из моего стилизованного компонента:

const FirstDivElement = styled.div`
  position: relative;
  overflow: hidden;
  width: 100%;
  background-color: #000;
  &:hover {
    background-color: #e6007e;
    transform: scale(1.05);
  }
  &:active{
    background-color: #e6007e;
  }
`

Не получается стиль &: active

Мой элемент div:

<div id="interfaceDesign">
            <div onClick={onClickChange}>
              <ListItems
                headingText="Interface Design"
                backgroundImage={props.secondBackgroundImage}
              >
                <Img
                  style={{
                    height: '50px',
                    width: '50px',
                  }}
                  sizes={props.interfacedesign}
                />
              </ListItems>
            </div>
          </div>
          <div id="myDIV" style={{ display: 'none' }}>
            <InterfaceDesign
              secondBackgroundImage={props.secondBackgroundImage}
              interfacedesignMagenta={props.interfacedesignMagenta}
            />
          </div>
          </div>

Может кто-нибудь помочь, пожалуйста?Заранее спасибо: D

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Вы предоставляете стили для : активного псевдокласса , который используется только при активации элемента (например, при щелчке мыши).Вы, вероятно, захотите изменить с &:active на &.active в своем стилизованном компоненте CSS.

Кроме того, вы должны заметить, что обычно вы меняете стили на основе реквизита с помощью Стилизованных компонентов.Вы можете делать то, что делаете, но это менее распространено.

0 голосов
/ 23 октября 2018

Вы можете сделать это, передав опору active в свой FirstDivElement и обновив свой метод onClick.

вот пример:

const FirstDivElement = styled.div`
    position: relative;
    overflow: hidden;
    width: 100%;
    background-color: ({ active }) => active ? #e6007e :#000;
    &:hover {
        background-color: #e6007e;
        transform: scale(1.05);
    }
    &:active{
        background-color: #e6007e;
    }
` 


onClickChange = () => {
    let MyDiv = document.getElementById('myDIV')
    this.setState({
       active: MyDiv.style.display === 'none' 
    })
}


render(){
    const { active } = this.state
    return(
        <div>
            <div onClick={onClickChange}>
                {/* content */}
            </div>
            <FirstDivElement active={active}>
                {/* content */}
                 <div id="myDIV" style={{ display: 'none' }}/>
            </FirstDivElement>
            <button onClick={this.onClickChange}> Click </button>
        </div> 
    )
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...