2016-05-01 4 views
10

Ich habe eine Komponente:Wie kann ich Komponenten beim Klick in React-redux anzeigen/verbergen?

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

Ich brauche diese ReplyForm auf Vorlast versteckt werden. Wie kann man den Status durch Klicken auf ein Tag auslösen?

+0

Verwenden Sie tatsächlich Redux überall? –

+0

Wenige verwandte Beiträge [hier] (https://stackoverflow.com/q/24502898/465053) und [hier] (https://stackoverflow.com/q/29913387/465053). – RBT

Antwort

19

Sie sollten einige Flag auf den Zustand der CommentBox hinzuzufügen. Und wenn der Wert dieses Flags false ist, wenn ReaplyFrom nicht angezeigt wird und umgekehrt. Heres der Code und das Arbeitsbeispiel 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

Sie mutieren Zustand innerhalb einer Komponente. Ist das etwas in Redux? Entsprechend ist es Der Definitionszustand wird beibehalten und durch einen globalen Speicher mutiert. –

+0

@AftabNaveed Ich habe gerade versucht zu zeigen, dass du Redux oder irgendeine andere zusätzliche lib nicht benötigst, um eine solche Operation durchzuführen. Aber ich denke du hast recht, wenn du Redux verwendest, dann 'showReply 'sollte in den Laden gebracht werden. – t1m0n

+0

Dieses Video erklärt es klar https://youtu.be/Mo2_UPkZjJU – Prem

3

Wie wäre es damit?

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

Auf diese Weise stoppe ich Nachrichten wie - Warnung: setState (...): kann nur eine gemountete oder mounted Komponente aktualisieren "- –

Verwandte Themen