2016-07-20 22 views
7

Trong tiêu đề, tôi có nút menu , khi nhấp vào sẽ hiển thị các liên kết khác nhau để truy cập. Tuy nhiên, tôi chỉ muốn hiển thị nút menu khi nút trong đường dẫn nhà (ví dụ: "/"). Và khi tôi điều hướng đến các trang khác, tôi muốn thay đổi nút menu thành nút quay lại. Nút quay lại này sẽ giống như nút quay lại của trình duyệt sẽ quay lại một bước tại một thời điểm, cho đến khi tôi quay lại đường dẫn chính. Làm thế nào tôi có thể đạt được điều này? Tôi đang sử dụng "phản ứng": "^ 15.1.0" và "phản ứng-bộ định tuyến": "^ 2.5.2".Hiển thị nút Quay lại để quay lại như nút quay lại trình duyệt khi không ở trong đường dẫn nhà

AppClient.js

ReactDom.render((
    <Router history={hashHistory} > 
     <Route path="/" component={App}> 
      <IndexRoute component={Home} /> 
      <Route path="home" component={Home}/> 
      ... 
      ... 
      <Route path="profile" component={Profile}> 
       <IndexRoute component={Timeline} /> 
       <Route path="timeline" component={Timeline}/> 
     </Route> 
     <Route path="login" component={Login}/> 
    </Router> 
), reactContainer) 

App.js

export default class App extends React.Component { 
    render() { 
     const _this = this; 
     return (
      <div> 
       <Header/> 
       ... 
       ... 
      </div> 
     ); 
    } 
} 

Header.js

export default class Header extends React.Component { 
    render() { 
     return(
      <header> 
       <div id="header-wrapper"> 
        <div id="nav-bar-btn" class="nav"> 

         // change Menu when its not home path that is "/" 
         <Menu> 
         // to Back 
         <Back> 

        </div> 
       </div> 
      </header> 
     ); 
    } 

} 
+0

Sử dụng ' ' – mmushtaq

+0

Đây là cú pháp HTML .. – mmushtaq

+0

nếu bạn đang sử dụng redux quá, sau đó bạn sẽ nhận được một bộ định tuyến thông qua đạo cụ và sau đó bạn có thể kiểm tra đơn giản cho router.location.pathname sử dụng toán tử ternary để gắn kết'

'hoặc '' thành phần. Khôn ngoan khác bạn sẽ phải lắng nghe để thay đổi tuyến đường. – Vikramaditya

Trả lời

4

jsfiddle demo

import { hashHistory } from 'react-router'; 

export default class Header extends React.Component { 
    constructor(props){ 
     super(props); 
     this.state={showBack:location.hash.split('?')[0]!=="#/"}; 
     this.hook = hashHistory.listenBefore(loc=> 
      this.setState({showBack:loc.pathname!=="/"}) 
     ); 
    } 
    componentWillUnmount(){ 
     this.hook(); //unlisten 
    } 
    render() { 
     return(
      <header> 
       <div id="header-wrapper"> 
        <div id="nav-bar-btn" class="nav"> 
         {this.state.showBack? 
         <div onClick={()=>hashHistory.goBack()}>Go BACK</div> 
          : <Menu/> 
         } 
        </div> 
       </div> 
      </header> 
     ); 
    } 
} 

listenBefore đồng hồ con đường, và quyết định xem nút chương trình hay không.

hashHistory.goBack(), hoạt động như trình duyệt lại nút

enter image description here

+0

Câu trả lời tuyệt vời nhưng bạn có thể vui lòng cập nhật câu trả lời của bạn bằng cách chứng minh làm thế nào để làm điều này trong 'phản ứng-router v4' – Abhi

+0

Không thể đọc tài sản 'listenBefore' của undefined lỗi này tôi nhận được –

Các vấn đề liên quan