Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

210
Visualizações
Alternar mostrar/ocultar a un elemento específico

Tengo este código en particular que muestra una lista de preguntas y botones para cada uno de ellos. Cuando hago clic en el botón, se mostrará la respuesta específica a la pregunta. Mi problema es que tengo un montón de preguntas y cuando hago clic en el botón, se mostrarán todas las respuestas en lugar de la respuesta específica a esa pregunta.

Aquí está el código

 class App extends React.Component { constructor(){ super() this.state = { answer: [], isHidden: true } this.toggleHidden = this.toggleHidden.bind(this) } componentWillMount(){ fetch('http://www.reddit.com/r/DrunkOrAKid/hot.json?sort=hot') .then(res => res.json()) .then( (data) => { const answer = data.data.children.map(obj => obj.data); this.setState({answer}); }) } toggleHidden(){ this.setState({isHidden: !this.state.isHidden}) } render(){ const answer = this.state.answer.slice(2) return <div> <h1>Drunk or Kid</h1> {answer.map(answer => <div key={answer.id}> <p className="title">{answer.title}</p> <button onClick={this.toggleHidden}>Answer</button> {!this.state.isHidden && <Show>{answer.selftext}</Show>} </div> )} </div> } } const Show = (props) => <p className="answer">{props.children}</p>

Y aquí está el enlace al codepen

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Aquí hay un Codepen basado en mi sugerencia:

Los conceptos básicos del componente hijo serían:

 class Question extends React.Component { // Set initial state of isHidden to false constructor() { super(); this.state = { isHidden: false } } // Toggle the visibility toggleHidden() { this.setState({ isHidden: !this.state.isHidden }); } // Render the component render() { const { answer } = this.props; return ( <div key={answer.id}> <p className="title">{answer.title}</p> <button onClick={ () => this.toggleHidden() }>Answer</button> {this.state.isHidden && <Show>{answer.selftext}</Show>} </div> ); } }

Luego, lo asignaría dentro del componente principal como:

 answer.map(answer => <Question answer={answer} key={answer.id} /> )
over 4 years ago · Santiago Trujillo Relatório

0

Otra opción es agregar un estado que guarde la identificación de la respuesta abierta y luego verificar si la respuesta específica está en ese estado o no.

veamos en acción

 class SomeComponent extends React.Component { constructor(props){ super(props) this.state = { opened: [] } this.toggleShowHide = this.toggleShowHide.bind(this) } toggleShowHide(e){ const id = parseInt(e.currentTarget.dataset.id) if (this.state.opened.indexOf(id) != -1){ // remove from array this.setState({opened: this.state.opened.filter(o => o !== id)}) } else { this.setState({opened: [...this.state.opened, id]}) } } render(){ return <ul> { this.state.answers.map(ans => ( <li key={ans.id} data-id={ans.id}> question <button onClick={this.toggleShowHide}>show answer</button> <span style={{ display: this.state.opened.indexOf(ans.id) !== -1 ? 'block' : 'none' }}>answer</span> </li> ))} </ul> } }

Aquí hay un video en acción https://www.youtube.com/watch?v=GJsPEsckB4w

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda