2016-05-01 24 views
10

Ho un componente:Come mostrare/nascondere il componente al clic in React-redux?

class CommentBox extends Component { 
    render() { 
     return (
      <div> 
       <p>Some comment</p> 
       <a>Post a reply to this comment</a> 
      </div> 
      <ReplyForm /> 
     ) 
    } 
} 

ho bisogno di questo ReplyForm essere nascosto il caricamento iniziale. Come attivare il suo stato facendo clic su un tag?

+0

Stai effettivamente utilizzando Redux ovunque? –

+0

Pochi post correlati [qui] (https://stackoverflow.com/q/24502898/465053) e [qui] (https://stackoverflow.com/q/29913387/465053). – RBT

risposta

19

È necessario aggiungere un contrassegno allo stato CommentBox. E se il valore di questo flag è false quando non mostrare ReaplyFrom e viceversa. Ecco il codice e l'esempio di lavoro http://codepen.io/anon/pen/KzrzQZ

class ReplyForm extends React.Component { 
    constructor() { 
    super() 
    } 
    render(){ 
    return(
     <div>I'm ReplyForm</div> 
    ) 
    } 
} 

class CommentBox extends React.Component { 
    constructor() { 
    super(); 
    this.state = { 
     showReply: false 
    } 
    } 
    onClick(e){ 
    e.preventDefault(); 
    this.setState({showReply: !this.state.showReply}) 
    } 
    render() { 
    return (
     <div> 
     <p>Some comment</p> 
     <a onClick={this.onClick.bind(this)} href='#'>Post a reply to this comment</a> 
     {this.state.showReply && < ReplyForm/>} 
     </div> 
    ) 
    } 
} 
+1

Si sta modificando lo stato all'interno di un componente.Qualcosa va bene in Redux? lo stato di definizione è mantenuto e mutato da un negozio globale –

+0

@AftabNaveed Ho appena provato a mostrare che non hai bisogno di Redux o di qualsiasi altro extra lib per eseguire tale operazione.Ma suppongo che tu abbia ragione, se stai usando Redux quindi 'showReply 'dovrebbe essere messo in negozio – t1m0n

+0

Questo video lo spiega chiaramente https://youtu.be/Mo2_UPkZjJU – Prem

3

Che ne dici di questo?

class CommentBox extends Component { 
    constructor() { 
    super(); 
    this.state = { 
     showForm: false 
    } 
    } 

    render() { 
    const showHide = { 
     'display': this.state.showStatus ? 'block' : 'none' 
    }; 

    const showReplyForm =() => { 
     this.setState({showForm: true}); 
    }; 

    return (
     <div> 
     <div> 
      <p>Some comment</p> 
      <a onClick={showReplyForm}>Post a reply to this comment</a> 
     </div> 
     <div style={showStatus}> 
      <ReplyForm /> 
     </div> 
     </div> 
    ) 
    } 
} 
+0

In questo modo mi viene impedito di ricevere messaggi come - Avviso: setState (...): può aggiornare solo un componente montato o montato "- –

Problemi correlati