2016-10-01 12 views
1

私はNavbarコンポーネントとModalLoginコンポーネントを持つ私のアプリケーションコンポーネントを持っています。ReactJS(es6)と兄弟コンポーネントを持つオープンモーダル

アプリケーションコンポーネント:

class App extends React.Component { 
    render() { 
    return (
     <div> 
     <Navbar history={this.props.history} /> 
     {this.props.children} 
     <ModalLogin /> 
     </div> 
    ); 
    } 
} 

ナビゲーションバーコンポーネント

class Navbar extends React.Component { 
    constructor(props) { 
    super(props); 
    this.state = NavbarStore.getState(); 
    this.onChange = this.onChange.bind(this); 
    } 

    componentDidMount() { 
    NavbarStore.listen(this.onChange); 
    } 

    onChange(state) { 
    this.setState(state); 
    } 

    render() { 
    return (
    <nav className='navbar navbar-default navbar-static-top'> 
     <ul className='nav navbar-nav'> 
      <li><a href="#">Login</a></li> 
     </ul> 
    </nav> 
) 
} 

そしてModalLoginが反応し、ブートストラップを使用しています:

render() { 
    return (
    <div> 
     <Modal show={this.state.showModal} onHide={ModalLoginActions.close}> 
     <Modal.Header closeButton> 
     <Modal.Title>Modal heading</Modal.Title> 
     </Modal.Header> 
     <Modal.Body> 
     </Modal.Body> 
    </Modal> 
) 
} 

しかし、あなたが見ることができるように、ナビゲーションバーやモーダルで兄弟であります私のアプリ。これは正しい方法ですか?

+0

oksと思われます。あなたが直面している問題はありますか? – vijayst

+0

ええ!

  • Login
  • には、モーダルディスプレイを起動するonClickがいくつかあるはずですが、わかりません。 – JVilla

    答えて

    0

    親でイベントをトリガするonClickハンドラを作成します。

    render() { 
        return (
        <nav className='navbar navbar-default navbar-static-top'> 
         <ul className='nav navbar-nav'> 
          <li><a href="#" onClick={this.props.onLogin}>Login</a></li> 
         </ul> 
        </nav> 
    ) 
    

    showModal状態をtrueに設定するハンドラをAppコンポーネントに追加します。

    <Navbar 
        history={this.props.history} 
        onLogin={() => this.setState({showModal: true})} 
    /> 
    

    ModalLoginコンポーネントにshowModalを渡します。

    <ModalLogin showModal={this.state.showModal} /> 
    

    ModalLogin内では、Modalを表示するためにpropsを使用します。

    Modal show={this.props.showModal} onHide={ModalLoginActions.close}> 
    
    +0

    しかし、その親はAppです。それは正しいのですか、それともそこから処理すべきですか? – JVilla

    +0

    LoginModalがNavBarからのみトリガされる場合、NavBarコンポーネント内に配置します。それ以外はAppに移動します。 – vijayst

    関連する問題