Suis nouveau pour réagir js, j'ai besoin de faire un en-tête commun et je dois changer de titre en fonction des changements de route. Dois-je créer un fichier header.jsx et l'importer? ou bien comment rendre l'en-tête (fichier commun) avec route? Ma partie de routage ressemble à ceci.
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>
));
Cela devrait fonctionner:
header.jsx:
class Header extends Component {
render() {
return (<div>Your header</div>);
}
}
first-page.jsx:
class FirstPage extends Component {
render() {
return (<div>First page body</div>);
}
}
second-page.jsx
class SecondPage extends Component {
render() {
return (<div>Second page body</div>);
}
}
app.jsx:
import Header from './header.jsx';
class App extends Component {
render() {
return (
<div>
<Header />
{this.props.children}
</div>
);
}
}
web-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>
);
essayez ceci 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>
);};
Donc, si vous devez afficher un en-tête commun parmi vos itinéraires, il existe plusieurs façons de le faire. La première est que vous pouvez définir votre en-tête à l'intérieur de son propre composant. Quelque chose de simple par exemple:
import React from 'react';
export default React.createClass({
render() {
return <div className='header'><h1>{this.props.title}</h1></div>;
}
}
Ensuite, dans votre composant home, composant app, etc. Placez simplement à l'intérieur de votre render (), après l'avoir importé en haut de chaque fichier.
L'autre option consiste à créer votre propre sorte de composant conteneur, en utilisant toujours le composant En-tête que nous avons défini ci-dessus:
import React from 'react';
export default React.createClass({
render() {
return (
<div className='container'>
<Header title={this.props.title} />
{this.props.children}
</div>
);
}
}
Ensuite, où vous déclarez vos itinéraires:
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>
));
Certes, je n'ai pas essayé cette deuxième option. Vous devrez peut-être passer le routeur en tant que paramètre du composant conteneur à son utilisation du composant enfants, si vous voulez faire des choses comme router.transitionTo('/path')
.
C'est juste une option si vous ne voulez pas répéter partout.