@MbIW

Как сделать чтобы открытый текст скрывался при развертке второго текста?

Сейчас каждый компонент MainBlock открывается и закрывается отдельно от других, а как сделать теперь чтобы первый компонент с текстом закрывался сам, когда разворачиваешь второй

component FAQ

const faqList = [
  {
    id: 1,
    question: "На каких пляжах Пхукета спокойное море в октябре",
    answer: "Во второй половине октябре достаточно спокойное море на пляже Банг-Тао."
  },
  {
    id: 2,
    question: "Есть ли ядовитые медузы на пляжах Пхукета",
    answer: "Во второй половине октябре достаточно спокойное море на пляже Банг-Тао."
  }]

    export default class FAQ extends React.Component {
  render(){


    return (
      <div>
        {faqList.map( data =>              
          <MainBlock data={data} />
        )}
    </div>
    )
  }
}


component MainBlock

export default class MainBlock extends React.Component {

  constructor(props) {
    super(props);
    this.state = {
        stateAnswer: true 

    }
  }

  handleClick = () => {
    this.setState(state =>({
        stateAnswer : !state.stateAnswer,
        
    })) 
  }

  render() {        
    return (
      <div>
        <div >
          {this.props.data.question}
          <button  onClick={this.handleClick} ><img src={arrow} /></button>
          <div style={{display: (this.state.stateAnswer ? 'none' : 'block')}}  >                   
            {this.props.data.answer}                  
          </div>
        </div>
      </div>
    )
  }
}
  • Вопрос задан
  • 78 просмотров
Решения вопроса 1
hzzzzl
@hzzzzl
не держи это в себе, прокидывай айди активного элемента наверх в родителя, отдельному элементу должно быть пофиг на это

// MainBlock
  handleClick = () => {
    this.props.setActive(props.data.id)
  }


// в class FAQ

setActive = id => { this.setState({ activeId: id }) }

...

{faqList.map( data =>              
  <MainBlock data={data} active={data.id === this.state.activeId} setActive={this.setActive} />
)}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы