2015-06-16 9 views
18

kiedy po raz pierwszy użyć reagować-routera, ale strona daje mi ten błąd poniżejReact-routera: type.toUpperCase nie jest funkcją

React-Router: type.toUpperCase nie jest funkcją

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')); 

wydaje się, że dokument nie zawiera niczego złego, ktoś mógłby mi pomóc?

gdzie błąd pochodzi tutaj

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

proszę dodać ślad stosu do błędu. –

Odpowiedz

3

zmianę require sprawozdań:

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

nadal błąd .. i w ten sposób pojawia się dwa ostrzeżenia takie jak Ostrzeżenie: React.createElement: type nie powinno mieć wartości null lub undefined. Powinien to być ciąg (dla elementów DOM) lub ReactClass (dla komponentów kompozytowych). bundle.js: 1730 Ostrzeżenie: jako komponenty React można montować tylko funkcje lub łańcuchy. – Fakefish

+0

Wyrażenia 'require' nie powinny powodować ostrzeżenia. BTW: Twój powyższy kod wydaje się nieprawidłowy, więc czy mógłbyś stworzyć skrzypce ?! lub alternatywnie zamieścić swój cały kod? – marcel

32

Błąd zostanie zaksięgowana jest tajemniczy, ale co to znaczy, to staramy się uczynić komponent z zmiennej, która nie jest rzeczywistym elementem. Na przykład, można to zrobić i uzyskać ten sam rodzaj błędu:

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

w kodzie ty pisał, <Router> mapy do zmiennej, która jest modułem, a nie składnik. Możesz go naprawić nową deklaracją zmiennej:

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

Widziałem ten błąd, ponieważ nie wyeksportowałem komponentu i próbowałem go użyć. Łatwo znaleźć, gdy wiem, co oznacza błąd, dzięki. – CallMeNorm

17

Otrzymałem ten sam błąd. Wtedy domyślam się, że popełniłem błąd podczas eksportu moich komponentów. W jednym komponencie napisałem moduł.export zamiast module.exports. Więc sprawdź, czy popełniłeś ten sam błąd.

0

jeśli używasz reagować-Router v0.13.3 zastąpić Route r na Szlaku tak:

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

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

Czy mógłbyś jeszcze bardziej rozwinąć swoją odpowiedź, dodając nieco więcej opisu dostarczonego rozwiązania? – abarisone

+0

nie, nie mogę, ponieważ nie mówię po angielsku, po prostu zobacz [dokumentacja] (https://github.com/rackt/react-router/blob/0.13.x/doc/00%20Guides/Router% 20Overview.md) – ololo