2016-07-21 34 views
4

jsに反応する新しい、私はヘッダーを共通にする必要があり、ルートの変更に応じてタイトルを変更する必要があります。 header.jsxファイルを作成してインポートする必要がありますか?それともヘッダー(共通ファイル)をルートでレンダリングするのですか? ルーティングパートは次のようになります。React jsは共通のヘッダーを使用する

import React from 'react'; 
import ReactDOM from 'react-dom'; 
import App from './App.jsx'; 
import Home from './Home.jsx'; 
import { Router, Route, Link, browserHistory, IndexRoute } from 'react-router'; 

ReactDOM.render((
    <Router history = {browserHistory}> 
     <Route path = "/home" component = {Home} /> 
     <Route path = "/" component = {App}> 
     </Route> 
    </Router> 
)); 
+0

あなたはあなたの修正しようとしているもののコードを投稿する必要があります。したがって、共通のヘッドコンポーネントを投稿し、コンテナ/トップレベルコンポーネントにそのコンポーネントがどのように含まれているかを伝えます。ルーティングの仕組み – agmcleod

+0

申し訳ありませんが、修正されていません。まだしていない。 – sibi

答えて

14

これは動作するはず:

header.jsx:

class Header extends Component { 
    render() { 
    return (<div>Your header</div>); 
    } 
} 

一page.jsx:

class FirstPage extends Component { 
    render() { 
    return (<div>First page body</div>); 
    } 
} 

二page.jsx

class SecondPage extends Component { 
    render() { 
    return (<div>Second page body</div>); 
    } 
} 

アプリ。 jsx:

import Header from './header.jsx'; 

class App extends Component { 
    render() { 
    return (
     <div> 
     <Header /> 
     {this.props.children} 
     </div> 
    ); 
    } 
} 

ウェブapp.jsx:

import App from './app.jsx'; 
import FirstPage from './first-page.jsx'; 
import SecondPage from './second-page.jsx'; 

ReactDOM.render(
    <Router history = {browserHistory}> 
    <Route path = "/" component = {App}> 
     <Route path = "/first" component = {FirstPage}> 
     <Route path = "/second" component = {SecondPage}> 
    </Route> 
    </Router> 
); 
+0

Home.jsx、About.jsxのように複数のjsxファイルを持っています。この場合、私は何をする必要があります。 – sibi

+0

分離されたファイルを反映するための答えを更新しました。 – lalkmim

+0

それは完璧な@ lalkmim – sibi

1

あなたのルートの間で共通のヘッダを表示する必要があるのであれば、それをやってのカップルの方法があります。このhttps://www.npmjs.com/package/react-helmet

import React from "react"; 
import Helmet from "react-helmet"; 

export default function Application() { 
return (
    <div className="application"> 
     <Helmet title="My Title" /> 
     ... 
    </div> 
);}; 
+1

誰でもこれを落札してください、説明してください! – abimelex

+0

@abimelex - 私はダウンボートしませんでしたが、ヘルメットが正しく理解されていれば、 "ドキュメントヘッド"(つまり、HTML 要素を変更するために使用されます。 )OPの質問に記述されているように共有コンポーネントヘッダを提供するためではありません。 –

0

を試してみてください。 1つは独自のコンポーネント内にヘッダを定義できることです。例えば、単純な何か:するとなどご自宅のコンポーネント、アプリケーションコンポーネントに簡単に内部に入れ

import React from 'react'; 
export default React.createClass({ 
    render() { 
    return <div className='header'><h1>{this.props.title}</h1></div>; 
    } 
} 

があなたの(レンダリング)、各ファイルの先頭にそれをインポートした後。確かに私が持っている

import React from 'react'; 
import ReactDOM from 'react-dom'; 
import App from './App.jsx'; 
import Home from './Home.jsx'; 
import Container from './Container.jsx'; 
import { Router, Route, Link, browserHistory, IndexRoute } from 'react-router'; 

ReactDOM.render((
    <Router history = {browserHistory}> 
     <Route path = "/home" component = {<Container title='home'><Home /></Container>} /> 
     <Route path = "/" component = {<Container title='app'><App /></Container>}> 
     </Route> 
    </Router> 
)); 

:次に、あなたのルートを宣言するところ

import React from 'react'; 
export default React.createClass({ 
    render() { 
    return (
     <div className='container'> 
     <Header title={this.props.title} /> 
     {this.props.children} 
     </div> 
    ); 
    } 
} 

他のオプションは、まだ我々は、上記で定義されたヘッダ・コンポーネントを使用して、コンテナコンポーネントの独自の並べ替えを作成することですその2番目のオプションを試していない。 router.transitionTo('/path')のようなことをしたい場合は、コンテナコンポーネントから子コンポーネントの使用に至るまで、ルータとしてパラメータを渡す必要があります。

どこでも繰り返したくない場合は、単なるオプションです。

関連する問題