2016-05-01 14 views
10

Mam komponent:Jak pokazać/ukryć komponent po kliknięciu w React-redux?

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

Potrzebuję tej ReplyForm być ukryte na wstępnym obciążeniem. Jak wyzwolić jego stan, klikając znacznik?

+0

Czy w rzeczywistości używasz Redux w dowolnym miejscu? –

+0

Kilka pokrewnych postów [tutaj] (https://stackoverflow.com/q/24502898/465053) i [tutaj] (https://stackoverflow.com/q/29913387/465053). – RBT

Odpowiedz

19

Powinieneś dodać flagę do stanu CommentBox. A jeśli wartość tej flagi jest false, gdy nie pokazują ReaplyFrom i odwrotnie. Oto kod i przykład roboczy: 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

Zmieniasz stan wewnątrz komponentu. stan defination jest utrzymywany i zmutowany przez globalny magazyn –

+0

@AftabNaveed Próbowałem tylko pokazać, że nie potrzebujesz Redux ani żadnej dodatkowej biblioteki do wykonania takiej operacji, ale myślę, że masz rację, jeśli używasz Redux, a następnie 'showReply 'powinien zostać umieszczony w sklepie. – t1m0n

+0

Ten film wyjaśnia go wyraźnie https://youtu.be/Mo2_UPkZjJU – Prem

3

Co powiesz na to?

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

W ten sposób przestajesz otrzymywać komunikaty takie jak: - Ostrzeżenie: setState (...): może aktualizować tylko zamontowany lub montowany komponent "- –

Powiązane problemy