2015-06-16 67 views
18

當我第一次使用反應的路由器,但頁給我下面陣營路由器:type.toUpperCase不是一個函數

這個錯誤進行響應路由器:type.toUpperCase不是一個函數

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

從文檔看來沒有錯,有人可以幫我嗎?

其中的錯誤來這裏

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

請添加堆棧跟蹤誤差。 –

回答

3

變化的需要聲明:

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

仍然錯誤..這種方式來警告:警告:React.createElement:類型不應該爲空或未定義兩個警告。它應該是一個字符串(用於DOM元素)或ReactClass(用於複合組件)。 bundle.js:1730警告:只能將函數或字符串裝載爲React組件。 – Fakefish

+0

'require'語句不應該引起警告。順便說一句:你上面的代碼看起來不正確,那麼你可以創建一個小提琴嗎?!或者發佈你的整個代碼? – marcel

32

您發佈的錯誤是神祕的,但它的意思是你想呈現一個組成部分,變量的那不是一個真正的組件。例如,你可以這樣做,並得到同樣的錯誤:

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

在您發佈,<Router>映射到一個變量,它是一個模塊,而不是一個組件的代碼。你可以用一個新的變量聲明修復它:

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

我看到這個錯誤,因爲我沒有導出組件,我試圖使用它。一旦我知道錯誤意味着什麼,很容易找到,謝謝。 – CallMeNorm

17

我得到了同樣的錯誤。然後我發現在導出組件時我犯了錯誤。在一個組件中,我寫了module.export而不是module.exports。所以,請檢查你是否犯了同樣的錯誤。

0

如果使用反應路由器v0.13.3 在路線, 這樣的替代路線[R

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

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

您能詳細解釋一下您提供的解決方案嗎? – abarisone

+0

不,我不能,因爲我不會說英文,只能看[文檔](https://github.com/rackt/react-router/blob/0.13.x/doc/00%20Guides/Router% 20Overview.md) – ololo