簡體   English   中英

反應路由器不顯示組件

[英]React-router not displaying component

我目前正在學習 react-router,然后嘗試在示例應用程序中實現它。

這是我的代碼:

索引.html

<!DOCTYPE html>
<html>
    <head>
        <title>Sample APP</title>
        <link rel="stylesheet" href="dist/css/style.css">
    </head>

    <body>
        <div id="main"></div>
    </body>

    <script src="dist/js/main.js"></script>
</html>

/src/app.jsx

var React = require('react');
var ReactDOM = require('react-dom');

var Routes = require('./routes');

ReactDOM.render(Routes, document.getElementById('main'));

/src/routes.jsx

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

var HelloWorld = require('./components/hello-world');
var NotFound = require('./components/not-found');
var About = require('./components/about');

module.exports = (
    <Router>
        <Route path="/" component={HelloWorld}>
            <Route path="about" component={About}/>
        </Route>
    </Router>
);

/src/components/hello-world.jsx

var React = require('react');
var Link = require('react-router').Link;

module.exports = React.createClass({
    render: function() {
        return <div>
            <h1>
                Hello World !
            </h1>
            <Link to="/about">About</Link>
        </div>
    }
});

/src/components/about.jsx

var React = require('react');

module.exports = React.createClass({
    render: function() {
        return <h1>
            About
        </h1>
    }
});

包.json

{...}
"dependencies": {
    "browserify": "^9.0.3",
    "gulp": "^3.8.11",
    "gulp-concat": "^2.5.2",
    "gulp-react": "^3.0.1",
    "gulp-sass": "^2.0.1",
    "gulp-server-livereload": "^1.3.0",
    "gulp-util": "^3.0.4",
    "gulp-watch": "^4.2.4",
    "history": "^1.13.1",
    "node-notifier": "^4.2.1",
    "react": "^0.14.3",
    "react-dom": "^0.14.3",
    "react-router": "^1.0.0",
    "reactify": "^1.1.0",
    "vinyl-source-stream": "^1.1.0",
    "watchify": "^2.4.0"
}

我用gulpbrowserifyreactify我的消息來源為/dist/js/main.js

當我點擊about鏈接時,url 從http://localhost:8000/#/?_k=zkmiyh變為http://localhost:8000/#/about?_k=6nhkao但顯示的組件仍然是hello-world .

我的控制台上沒有顯示錯誤。

有什么遺漏嗎?

丑陋的解決方案是擺脫嵌套路線,如下所示:

module.exports = (
    <Router>
        <Route path="/" component={HelloWorld} />
        <Route path="/about" component={About} />
    </Router>
);

然而,我通過這個文檔想出了正確的方法

我們需要另一個組件(我稱之為Main ),它將包含要顯示的正確組件(即this.props.children )。

我使用IndexRoute來定義要顯示的默認組件。

這是更正后的代碼:

/src/components/main.jsx(

var React = require('react');

module.exports = React.createClass({
    render: function() {
        return <div>
            // this is where you can add header
            {this.props.children}
            // this is where you can add footer
        </div>
    }
});

/src/routes.jsx(已修改

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

var Main = require('./components/main');
var HelloWorld = require('./components/hello-world');
var About = require('./components/about');

module.exports = (
    <Router>
        <Route path="/" component={Main}>
            <IndexRoute component={HelloWorld} />
            <Route path="about" component={About} />
        </Route>
    </Router>
);

我在我的APP中也有相同的概率我已經更改了父節點並設置為相同節點然后它的工作可能對它有幫助

module.exports = (
<Router>
    <Route path="/" component={HelloWorld} />
    <Route path="about" component={About}/> 
</Router>

);

對於 react-dom 版本 6,我使用了“元素”而不是“組件”,它對我有用。 這里我們不需要提及“精確”。

例如 :

<Routes>
          <Route path="/" element={<Home />}/>
          <Route path="/add-course" element={<Addcourse/>} exact />
          <Route path="/view-courses" element={<Allcourses/>} exact />
</Routes>
module.exports = (
    <Router>

        <Route path="/"> 
           <HelloWorld/> 
        </Route>

        <Route path="about"> 
           <About/>
        </Route>

    </Router>
);

這可能會幫助您檢查這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM