2016-10-27 59 views
4

我有一個抽屜組件,帶有一個打開此抽屜的按鈕。 我想通過點擊抽屜區域以外的任何地方關閉抽屜。我試過這段代碼。它適用於開放,但它不適用於關閉。React.js中的抽屜

var Child = React.createClass({ 
    render: function() { 
    return (
     <div className="chatBar"> 
      <div onClick={this.onClick} className="closeBTN"> 
       <img src="../src/contents/images/svg/close.svg"/> 
      </div> 

      <Tab /> 
     </div> 
     ); 
    } 
}); 

var ChatBar = React.createClass({ 
    getInitialState: function() { 
    return { childVisible: false ,childInVisible: true ,}; 

    }, 

    render: function() { 
    return(
     <div> 
     <div onClick={this.onClick} className="chatBTN"> 
     <img src="../src/contents/images/svg/chat.svg"/> 
     </div> 
     { 
      this.state.childVisible 
      ? <Child /> 
      : null 
     } 
     </div> 
    ) 
    }, 

    onClick: function() { 
    this.setState({childVisible: !this.state.childVisible}); 
    }, 

    onClickClose: function(){ 
    this.setState({childInVisible: !this.state.childInVisible}); 
    }, 
}); 

export default ChatBar; 
+0

你可以在這裏找到一個解決方案http://stackoverflow.com/questions/32553158/detect-click-outside-react-component –

+0

你能解釋一下我的代碼嗎?我是新的反應,我不知道如何做到這一點.tnx很 – leman17

+0

或看看這個工具https://github.com/Pomax/react-onclickoutside –

回答

1

請檢查工作演示JSFiddle

var Child = React.createClass({ 
    render: function() { 
    return (
     <div className="chatBar"> 
      <div onClick={this.props.onClick} className="closeBTN"> 
       <img src="http://www.freeiconspng.com/uploads/silver-close-button-png-15.png"/> 
      </div> 
     </div> 
     ); 
    } 
}); 

var ChatBar = React.createClass({ 
    getInitialState: function() { 
    return { childVisible: false }; 

    }, 

    render: function() { 
    return(
     <div> 
     <div onClick={this.onToggle} className="chatBTN"> 
     <img src="http://www.omeglechat.eu/wp-content/uploads/2016/10/omegle-mnogochat.png"/> 
     </div> 
     { 
      this.state.childVisible 
      ? <Child onClick={this.onToggle.bind(this)} /> 
      : null 
     } 
     </div> 
    ) 
    }, 

    onToggle: function() { 
    this.setState({childVisible: !this.state.childVisible}); 
    } 
}); 


React.render(<ChatBar />, document.body); 

首先,用一個標誌在state

onToggle: function() { 
    this.setState({childVisible: !this.state.childVisible}); 
    } 

其次,爲了在子組件調用一個函數(onClick),你需要通過<Child onClick={this.onToggle.bind(this)} />在處理程序通過,在子組件中調用它onClick={this.props.onClick}

+0

它不適合我。兩個作品打開我的聊天欄,但我不能關閉它.plz幫助 – leman17

+0

請檢查我的答案更新。你可能想通過一些reactjs教程來使用語法。 – Joy

+0

tnks很多...我可以問你一些問題嗎?如何通過單擊聊天欄組件外部來關閉聊天欄? – leman17