2016-12-06 4 views
0

У меня есть приложение с навигацией вверху (Главная, О программе, Часто задаваемые вопросы). Только на маршруте HOME мне нужно, чтобы меню было скрыто, а затем показано onscroll. Навигация построен в App.jsx, поэтому он отображается на каждой странице. Как включить раскрытие только для этого конкретного маршрута?Показывать навигационный компонент по одному маршруту в Реагировании

Моя выявить компонент

import React, { Component } from 'react'; 

class NavScroll extends React.Component { 
    constructor(props){ 
     super(props); 
     this.state={isHide:false}; 
     this.hideBar = this.hideBar.bind(this) 
    } 
    hideBar(){ 
     let {isHide} = this.state 
     window.scrollY > this.prev? 
     !isHide && this.setState({isHide:true}) 
     : 
     isHide && this.setState({isHide:false}) 

     this.prev = window.scrollY; 
    } 
    componentDidMount(){ 
     window.addEventListener('scroll',this.hideBar); 
    } 
    componentWillUnmount(){ 
     window.removeEventListener('scroll',this.hideBar); 
    } 
    render(){ 

     let classHide=this.state.isHide?"hide":"" 
     return <div className={"fixed "+classHide}> 
     </div>; 
    } 
} 

export default NavScroll; 

App.jsx

import React, { Component } from 'react'; 
import NavLink from './global/NavLink.jsx'; 
import Footer from './global/Footer.jsx'; 
import NavScroll from './global/NavScroll.jsx'; 


var App = React.createClass({ 



    render: function(){ 

    return (
     <div> 
     <div> 
      <NavLink to="/"><img className="logo" alt="HOME"></img></NavLink> 
      <NavLink to="/about" className="navMenuButton">ABOUT</NavLink> 
      <NavLink to="/faq" className="navMenuButton">FAQ</NavLink> 
     </div> 

     { this.props.children } 

     <Footer /> 

     </div> 
    ); 
    } 
}); 



export default App; 

ответ

0

Вы хотите, чтобы проверить pathname текущего location. location - это injected prop компонента, отображаемого для согласованного маршрута.

class App extends React.Component { 

    render() { 
    const { location } = this.props 

    return (
     <div> 
     { location.pathname === '/' ? <HomeNavigation /> : <OtherNavigation /> } 
     </div> 
    ) 
    } 
} 
+0

спасибо! Я должен был быть более конкретным и использовать this.props.location, а именно: const location = this.props.location; –

+0

'const {location} = this.props' совпадает с' const location = this.props.location', он просто использует назначение деструктуризации. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Object_destructuring Это действительно не обязательно для одной переменной, но она пригодится, когда вы хотите разрушить число переменных из одного и того же объекта. –

+0

Кроме того, если это решает вашу проблему, вы можете отметить это как правильный ответ. –

Смежные вопросы