2016-03-21 19 views
3

Ich kämpfe mit Reagieren Router. alles, was ich will, ist ein Side-Menü mit einem Link zum Login zu bauen, dass die Login-Comp im rechten Fensterbereich angezeigt wird. so ist dies der HTML:react-router: Kann Eigenschaft 'push' von undefined nicht lesen

<main id="buschat-app"></main> 
<div id="menu"></div> 

Dies ist, wie ich den Buschat Haupt-comp und den Router comp machen.

class Buschat extends React.Component { 
    constructor() { 
     super() 
    } 

    render() { 
     return (
      <div className="container-fluid"> 
       <div className="row"> 
        <div className="col-sm-2"> 
         <Menu /> 
        </div> 
        <div className="col-sm-10"> 
         <Main /> 
        </div> 
       </div> 
      </div> 
     ) 
    } 
} 

ReactDOM.render(<Buschat />, document.getElementById('buschat-app')) 
ReactDOM.render((
    <Router history={hashHistory}> 
     <Route path="/" component={Default}/> 
     <Route path="login" component={Login}/> 
    </Router> 
), document.getElementById('menu')); 

jetzt, in das Menü comp haben, die so aussieht:

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

export default class Menu extends React.Component { 
    render() { 
     return (
      <div> 
       <nav className="navbar navbar-light bg-faded"> 
         <Link to="/">Default</Link> 
         <Link to="/login">Login</Link> 
       </nav> 
      </div> 
     ) 
    } 
} 

, wenn die Seite Last i die 2 Links auf der rechten Seite zu sehen ist. , wenn ich auf dem Login-Link klicken, i diese Konsole Fehler:

Uncaught TypeError: Cannot read property 'push' of undefined 

was im falsch? Wie reagiert der react-router, um Login comp im rechten Fensterbereich darzustellen? Entschuldigung, aber ich bin neu zu diesem ...

+0

'' sieht mir komisch aus. Benennen Sie den 'browserHistory'-Import um, der mit der neuesten Version von React Router verwendet werden sollte? – Narigo

+0

nein, nahm ich es aus diesem Beispiel: https://github.com/reactjs/react-router-tutorial/tree/master/lessons/02-rendering-a-route sie sagen, wie dies zu importieren: Importieren Sie {Router, Route, HashHistory} von 'react-router'. –

+3

Ihr Buschat und damit Ihre Menü-Komponenten befinden sich nicht in derselben Anwendung wie Ihre React-Router-Komponente. Sie können 'Link' nur in der gleichen App verwenden, in der Sie Ihren Router haben. 99% der React-Anwendungen rufen "ReactDOM.render" nur einmal auf, wenn sie eine React-App erstellen. – azium

Antwort

0

entfernen

ReactDOM.render(<Buschat />, document.getElementById('buschat-app'))

und wechseln Sie in

ReactDOM.render((
    <Router history={hashHistory}> 
     <Route path="/" component={Buschat}/> 
     <Route path="login" component={Login}/> 
    </Router> 
), document.getElementById('buschat-app')); 

in Buschat Klasse, fügen Sie die <Menu> Komponente.

Ich hoffe, das hilft!

Verwandte Themen