2017-02-22 4 views
1

ヘッダーコンポーネントでconsole.log()を実行すると常にヘッダーコンポーネントをレンダリングしないようにしたいのですが、ページをナビゲートするときに起動します。ここにある私のコードです:// Route.jsxpage-reactjsをナビゲートするときにヘッダーメニューを再レンダリングしないようにする

<Route component={HeroesPage}> 
    <Route path="/reactjs" component={HeroesComponent}></Route> 
    <Route path="/reactjs2" component={HeroesCreateComponent}></Route> 
</Route> 

// HeroesPage.jsx

import React from 'react'; 

import Header from "components/common/Header.jsx"; 
class HeroesPage extends React.Component { 
    render() { 
     return (
      <div> 
       <Header /> 
       { this.props.children } 
      </div> 
     ); 
    } 
} 

export default HeroesPage; 

// Header.jsx

import React from "react"; 
import { Link } from 'react-router'; 

class Header extends React.Component { 
    componentDidMount(){ 
     console.log('header loaded'); 
     // If I will add an api call here, it will fetch to the server everytime I navigate to the page 
    } 
    render(){ 
     return(
      <ul className="nav nav-tabs"> 
       <li><Link to="/reactjs">Reactjs 1</Link></li> 
       <li><Link to="/reactjs2">Reactjs 2</Link></li> 
      </ul> 
     ); 
    } 
} 


export default Header; 

答えて

1

のようなルートをリファクタリングしてみ
<Route path="/" component={HeroesPage}> 
    <Route path="reactjs" component={HeroesComponent} /> 
    <Route path="reactjs2" component={HeroesCreateComponent} /> 
</Route> 
+0

あなたは男です!これは私が探しているものです。だから、ただの簡単な質問です。だから私はパス= "/" SkillsPage、ProfilePageを持っているすべてのページで必要となりますので、対応するヘッダーは再びレンダリングされません? –

+0

実際には、再レンダリングを避けるため、コンポーネントの適切な階層を維持する必要があります。あなたのケースでは、ヘッダーはルータで再生するコンポーネントです。したがって、 '/'は 'Header'でメインコンポーネントを保持し、' HeroesPage'内でレンダリングするすべての 'children'コンポーネントを残ります –

+0

' HeroesPage'を保持するコンポーネントが存在し、そのコンポーネントに '/ 'と'ヘッダー 'とコンポーネントの子ですか? –

関連する問題