2016-09-30 1 views
0

나는 반갑습니다. 전 사과드립니다. 그것은 가까이 enter image description here어떻게하면 부트 스트랩과 반응하여 navbar에서 모달을 구조화 할 수 있습니까?

: 내가 같이 내 탐색이 필요

import React, { Component } from 'react'; 
import AuthModal from './modals/AuthModal' 
import { Nav, NavItem, Navbar, NavDropdown, MenuItem } from 'react-bootstrap' 

export default class MyNavbar extends Component { 

    render() { 

    return (
     <Navbar inverse> 
     <Navbar.Header> 
      <Navbar.Brand> 
      <span className="logo">SITE</span> 
      </Navbar.Brand> 
      <Navbar.Toggle /> 
     </Navbar.Header> 
     <Navbar.Collapse> 
      <Nav className="navleft"> 
      <NavItem eventKey={1} href="#">Link</NavItem> 
      <NavItem eventKey={2} href="#">Link</NavItem> 
      <NavDropdown eventKey={3} title="Dropdown" id="basic-nav-dropdown"> 
       <MenuItem eventKey={3.1}>Action</MenuItem> 
       <MenuItem eventKey={3.2}>Another action</MenuItem> 
       <MenuItem eventKey={3.3}>Something else here</MenuItem> 
       <MenuItem divider /> 
       <MenuItem eventKey={3.3}>Separated link</MenuItem> 
      </NavDropdown> 
      </Nav> 
      <Nav pullRight className="navright"> 
      <NavItem eventKey={1} href="#"><AuthModal/></NavItem> 
      </Nav> 
     </Navbar.Collapse> 
     </Navbar> 
    ); 
    } 
} 

: 여기 내 메뉴 바 구성 요소의 "에서 로그인"을 제외하고 enter image description here

, "회원 가입"과 하나가 될 것으로 보인다 버튼을 누르십시오. 2 개의 별도 버튼이 필요합니다. 내 실제 모달에서

, 나는 탐색에 2 개 개의 별도 링크, 하나의 모달이 그래서 내가 그것을 가지고 어떻게

import React, { Component } from 'react' 
import { Button, Modal, OverlayTrigger, Popover, Tooltip, Nav, NavItem, Row, Col, FormGroup, FieldGroup, Checkbox } from 'react-bootstrap' 


export default class AuthModal extends Component { 

    constructor() { 
    super(); 
    this.render.bind(this); 
    this.state = {showModal: false} 
    } 

    close() { 
    this.setState({ showModal: false }); 
    } 

    open() { 
    this.setState({ showModal: true }); 
    } 

    handleSelect(eventKey) { 
    event.preventDefault(); 
    alert(`selected ${eventKey}`); 
    } 
    render() { 
    const popover = (
     <Popover id="modal-popover" title="popover"> 
     very popover. such engagement 
     </Popover> 
    ); 
    const tooltip = (
     <Tooltip id="modal-tooltip"> 
     wow. 
     </Tooltip> 
    ); 
    return (
     <div> 
     <span onClick={this.open.bind(this)}>Sign Up</span> 
     <span onClick={this.open.bind(this)}>Log In</span> 

     <Modal show={this.state.showModal} onHide={this.close.bind(this)}> 
      <Modal.Body> 
      <Row> 
       <Col md={12}> 
       <Nav bsStyle='pills' activeKey={this.eventKey} onSelect={this.handleSelect}> 
        <NavItem eventKey={1} title="Item" ><span className="login-nav-tab">Log In</span></NavItem> 
        <NavItem eventKey={1} title="Item" ><span className="login-nav-tab">Sign Up</span></NavItem> 
       </Nav> 
       </Col> 
      </Row> 
      <Row className='top-space' > 
       <form> 
       <FormGroup > 
        <Row> 
        <Col md={12}> 
         <input className="col-md-10 col-md-offset-1 top-space fat-input" placeholder="Email"/> 
         <input className="col-md-10 col-md-offset-1 top-space fat-input" placeholder="Password"/> 
        </Col> 
        </Row> 
        <Row className='top-space'> 
        <Col md={5} mdOffset={1}> 
         <Checkbox className="checkbox-login"> Remember Me </Checkbox> 
        </Col> 
        <Col md={6} className='forgot-password'> 
         <a href="">Forgot Password</a> 
        </Col> 
        </Row> 
        <Row className='top-space'> 
        <Col md={10} mdOffset={1}> 
         <Button bsStyle="btn btn-black btn-block">Login</Button> 
        </Col> 
        </Row> 
       </FormGroup> 
       </form> 
      </Row> 
      <hr></hr> 

      <Row> 
       <Col md={12} className="text-center"> 
       Login with blah 
       </Col> 
      </Row> 
      <Row className="top-space"> 
       <Col md={6}> 
       <Button bsStyle='btn btn-block btn-danger'> 
        Google 
       </Button> 
       </Col> 
       <Col md={6}> 
       <Button bsStyle='btn btn-block btn-info'> 
        Facebook 
       </Button> 
       </Col> 
      </Row> 


      </Modal.Body> 
      <Modal.Footer> 
      <Button onClick={this.close.bind(this)}>Close</Button> 
      </Modal.Footer> 
     </Modal> 
     </div> 
    ) 
    } 

} 

이 있습니다. 클릭 한 항목에 따라 모달에 가입 정보 또는 로그인 정보가 표시됩니다.

답변

1

당신은 보여 모달의 내용 중 어느 말할 것 인수를 허용하도록 open() 인스턴스 방법을 수정할 수 있으며 값이 상태 개체의 modalType 키 말에, setState와 구성 요소의 상태로 저장됩니다, 그리고에 render() 메서드를 사용하면 if 문을 사용하여이 modalType 상태 키를 확인하여 모달의 본문에 적절한 내용을 표시 할 수 있습니다.

export default class AuthModal extends Component { 
    const MODAL_TYPE_LOGIN = 1, MODAL_TYPE_SIGNUP = 2; 

    constructor() { 
    super(); 
    this.render.bind(this); 
    this.state = { 
     showModal: false 
    } 
    } 

    close() { 
    this.setState({ showModal: false }); 
    } 

    open(modalType) { 
    this.setState({ 
     showModal: true, 
     modalType: modalType 
    }); 
    } 

    handleSelect(eventKey) { 
    event.preventDefault(); 
    alert(`selected ${eventKey}`); 
    } 

    render() { 
    const popover = (
     <Popover id="modal-popover" title="popover"> 
     very popover. such engagement 
     </Popover> 
    ); 
    const tooltip = (
     <Tooltip id="modal-tooltip"> 
     wow. 
     </Tooltip> 
    ); 
    return (
     <div> 
     <span onClick={this.open.bind(this, MODAL_TYPE_SIGNUP)}>Sign Up</span> 
     <span onClick={this.open.bind(this, MODAL_TYPE_LOGIN)}>Log In</span> 

     <Modal show={this.state.showModal} onHide={this.close.bind(this)}> 
      <Modal.Body> 
      <Row> 
       <Col md={12}> 
       <Nav bsStyle='pills' activeKey={this.eventKey} onSelect={this.handleSelect}> 
        <NavItem eventKey={1} title="Item" ><span className="login-nav-tab">Log In</span></NavItem> 
        <NavItem eventKey={1} title="Item" ><span className="login-nav-tab">Sign Up</span></NavItem> 
       </Nav> 
       </Col> 
      </Row> 
      {this.state.modalType == MODAL_TYPE_LOGIN ? (
       <Row className='top-space' > 
       <form> 
        <FormGroup > 
        <Row> 
         <Col md={12}> 
         <input className="col-md-10 col-md-offset-1 top-space fat-input" placeholder="Email"/> 
         <input className="col-md-10 col-md-offset-1 top-space fat-input" placeholder="Password"/> 
         </Col> 
        </Row> 
        <Row className='top-space'> 
         <Col md={5} mdOffset={1}> 
         <Checkbox className="checkbox-login"> Remember Me </Checkbox> 
         </Col> 
         <Col md={6} className='forgot-password'> 
         <a href="">Forgot Password</a> 
         </Col> 
        </Row> 
        <Row className='top-space'> 
         <Col md={10} mdOffset={1}> 
         <Button bsStyle="btn btn-black btn-block">Login</Button> 
         </Col> 
        </Row> 
        </FormGroup> 
       </form> 
       </Row> 
       <hr></hr> 

       <Row> 
       <Col md={12} className="text-center"> 
       Login with blah 
       </Col> 
       </Row> 
       <Row className="top-space"> 
       <Col md={6}> 
        <Button bsStyle='btn btn-block btn-danger'> 
        Google 
        </Button> 
       </Col> 
       <Col md={6}> 
        <Button bsStyle='btn btn-block btn-info'> 
        Facebook 
        </Button> 
       </Col> 
       </Row> 
      ) : (
       <div>Your sign-up form goes in here</div> 
      )} 
      </Modal.Body> 
      <Modal.Footer> 
      <Button onClick={this.close.bind(this)}>Close</Button> 
      </Modal.Footer> 
     </Modal> 
     </div> 
    ) 
    } 
} 

비록, 이상적으로는 구성 요소가 관련되지 않은 경우에도 응용 프로그램에서 어디에서 열 모달의 유형을 제어 할 수 있도록 redux을 사용할 것입니다. Here은 redux를 사용하여 구현 된 모달 로직의 흥미로운 읽기 및 예입니다.

관련 문제