2015-06-16 23 views
18

quando ho primo ad utilizzare reagire-router, ma la pagina mi dà questo errore sottoReact-router: type.toUpperCase non è una funzione

React-router: type.toUpperCase non è una funzione

var React = require('react'); 
var Router = require('react-router'); 

var Route = Router.Route; 

var App = React.createClass({ 

    render: function() { 
    return (
     <div>App</div> 
    ); 
    } 
}); 

React.render((
    <Router> 
    <Route path="/" component={App} /> 
    </Router> 
), document.getElementById('app')); 

non sembra nulla di sbagliato dal documento, qualcuno potrebbe aiutarmi?

in cui l'errore viene qui

function autoGenerateWrapperClass(type) { 
    return ReactClass.createClass({ 
     tagName: type.toUpperCase(), 
     render: function() { 
     return new ReactElement(
      type, 
      null, 
      null, 
      null, 
      null, 
      this.props 
     ); 
     } 
    }); 
    } 
+0

Si prega di aggiungere una traccia dello stack per l'errore. –

risposta

3

cambiamento della richiedono dichiarazioni:

var React = require('react'); 
var ReactRouter = require('react-router'); 
var Router = ReactRouter.Router; 
var Route = ReactRouter.Route; 
+1

errore ancora .. e in questo modo vengono due avvertimenti come Avviso: React.createElement: tipo non dovrebbe essere nullo o indefinito. Dovrebbe essere una stringa (per elementi DOM) o una ReactClass (per componenti compositi). bundle.js: 1730 Avvertenza: solo le funzioni o le stringhe possono essere montate come componenti React. – Fakefish

+0

le istruzioni 'require' non dovrebbero causare gli avvertimenti. BTW: Il tuo codice sopra non sembra corretto, quindi potresti creare un violino per favore ?! o in alternativa pubblica tutto il tuo codice? – marcel

32

L'errore che hai postato è criptico, ma che cosa vuol dire è che si sta cercando di rendere un componente di una variabile che non è un componente reale. Ad esempio, si potrebbe fare questo e ottenere lo stesso tipo di errore:

render: function() { 
    var Thing = {}; // not a component 
    return <Thing />; // same error 
} 

Nel codice che hai postato, <Router> mappe per una variabile che è un modulo, non è un componente. È possibile risolvere il problema con una nuova dichiarazione variabile:

var React = require('react'); 

var routerModule = require('react-router'); 
var Router = routerModule.Router; // component 

var Route = routerModule.Route; 

var App = React.createClass({ 

    render: function() { 
    return (
     <div>App</div> 
    ); 
    } 
}); 

React.render((
    <Router> 
    <Route path="/" component={App} /> 
    </Router> 
), document.getElementById('app')); 
+2

Ho visto questo errore perché non avevo esportato il componente e stavo cercando di usarlo. Trova facilmente una volta che so cosa significa l'errore, grazie. – CallMeNorm

17

Stavo ottenendo lo stesso errore. Poi capisco che ho sbagliato durante l'esportazione dei miei componenti. In un componente ho scritto module.export invece di module.exports. Quindi, controlla se hai fatto lo stesso errore.

0

se si utilizza reagire-router v0.13.3 sostituire percorso r sulla Route, come questo:

var routes = (
    <Route> 
    <Route path="/" component={App} /> 
    </Route> 
); 

Router.run(routes, function(Root) { 
React.render(<Root />, document.getElementById('app')); 
}); 
+1

Potresti per favore elaborare più la tua risposta aggiungendo un po 'più di descrizione della soluzione che fornisci? – abarisone

+0

no, non posso, perché non parlo inglese, basta vedere [documentazione] (https://github.com/rackt/react-router/blob/0.13.x/doc/00%20Guides/Router% 20Overview.md) – ololo