2017-09-07 1 views
1

Je suis nouveau à réagir et j'essaie d'avoir un composant d'en-tête pour chaque page. Mon composant d'en-tête est en cours de chargement mais les enfants ne sont pas chargés.Les routages de routage imbriqués réagissent

index.js

import React from "react"; 
import {render} from "react-dom"; 
import {BrowserRouter, Route,Switch} from 'react-router-dom'; 

import {Root} from "./components/Root"; 
import {Home} from "./components/Home"; 
import {User} from "./components/User"; 

class App extends React.Component { 

    render(){ 
    return (  
     <BrowserRouter > 
      <Switch> 
       <Route path="/" component={Root} > 
        <Route path="/user" component={User}/> 
        <Route path="/home" component={Home}/>   
       </Route> 
      </Switch> 
     </BrowserRouter> 
    ) ; 
    } 
} 

render(<App />,window.document.getElementById("app")); 

Package.json

{ 
    "name": "react-1", 
    "version": "1.0.0", 
    "description": "My first react app", 
    "main": "index.js", 
    "scripts": { 
    "start": "npm run build", 
    "build": "webpack -d && cp src/index.html dist/index.html && webpack-dev-server --content-base src/ --inline --hot --history-api-fallback", 
    "build-prod": "webpack -p && cp src/index.html dist/index.html" 
    }, 
    "author": "Saurabh", 
    "license": "MIT", 
    "dependencies": { 
    "babel-core": "^6.26.0", 
    "react": "^15.6.1", 
    "react-dom": "^15.6.1", 
    "react-router": "^4.2.0", 
    "react-router-dom": "^4.2.2" 
    }, 
    "devDependencies": { 
    "babel-loader": "^7.1.2", 
    "babel-preset-es2015": "^6.24.1", 
    "babel-preset-react": "^6.24.1", 
    "babel-preset-stage-2": "^6.24.1", 
    "webpack": "^3.5.5", 
    "webpack-dev-server": "^2.7.1" 
    } 
} 

Root.js

import React from "react"; 
import {Header} from "./Header"; 

export class Root extends React.Component { 
    render(){ 
     return (
      <div className="container"> 
       <div className="row"> 
        <div className="col-xs-10 col-xs-offset-1"> 
         <Header /> 
        </div> 
       </div> 
       <div className="row"> 
        <div className="col-xs-10 col-xs-offset-1"> 
         dummy text{this.props.children} 
        </div> 
       </div> 
      </div> 
     ); 
    } 
} 

Header.js

import React from "react"; 
export const Header =(props) => { 
    return (
     <nav className="navbar navbar-default"> 
      <div className="container"> 
       <div className="navbar-header"> 
        <ul className="nav navbar-nav"> 
         <li><a href="#">Home</a></li> 
         <li><a href="#">User</a></li> 
        </ul> 
       </div>  
      </div> 
     </nav> 
    ); 
}; 

Je peux voir le texte fictif, mais quand j'essaie/user ou/home les pages respectives ne sont pas chargées. La page est actualisée.

+0

Des erreurs sur la console lorsque vous naviguez? Quel est le contenu de Header? – bennygenel

+0

Je reçois l'avertissement ci-dessous "Attention: Vous ne devriez pas utiliser et dans le même itinéraire, sera ignoré", mais pas d'avertissement –

Répondre

0

Les routes imbriquées fonctionnent différemment dans le routeur de réaction v4. Vous devez déplacer vos itinéraires imbriqués directement dans la méthode Root composant render.

index.js

import React from "react"; 
import {render} from "react-dom"; 
import {BrowserRouter, Route,Switch} from 'react-router-dom'; 

import {Root} from "./components/Root"; 

class App extends React.Component { 

    render(){ 
     return (
      <BrowserRouter > 
       <Switch> 
        <Route path="/" component={Root} /> 
       </Switch> 
      </BrowserRouter> 
     ) ; 
    } 
} 

render(<App />,window.document.getElementById("app")); 

Root.js

import React from "react"; 
import {Header} from "./Header"; 
import { Route, Switch } from 'react-router-dom'; 

import {Home} from "./components/Home"; 
import {User} from "./components/User"; 

export class Root extends React.Component { 
    render(){ 
     return (
      <div className="container"> 
       <div className="row"> 
        <div className="col-xs-10 col-xs-offset-1"> 
         <Header /> 
        </div> 
       </div> 
       <div className="row"> 
        <div className="col-xs-10 col-xs-offset-1"> 
         dummy text{this.props.children} 
        </div> 
       </div> 
       <Switch> 
        <Route path="/user" component={User}/> 
        <Route path="/home" component={Home}/> 
       </Switch> 
      </div> 
     ); 
    } 
} 

Le Switch dans Index.js acheminera à la composante Root qui a son propre Switch qui rend la première Route qui correspond à l'URL.

+0

Que dois-je faire si je veux aussi pour ajouter un pied de page avec l'en-tête –

+0

Vous pouvez ajouter un autre div sous le 'Switch' et ajouter votre composant' Footer'. Vous pouvez copier/coller le balisage pour 'Header' ici et désactiver le composant. –