React路由器未显示组件
React-router not displaying component
我目前正在学习react路由器,然后尝试在一个示例应用程序中实现它。
这是我的代码:
index.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>
}
});
package.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"
}
我使用gulp
到browserify
和reactify
将我的源放入/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>
);
我的应用程序中也有同样的问题,我已经更改了父节点并设置为相同的节点,然后它就可以工作了,这可能会帮助你
module.exports = (
<Router>
<Route path="/" component={HelloWorld} />
<Route path="about" component={About}/>
</Router>
);
module.exports = (
<Router>
<Route path="/">
<HelloWorld/>
</Route>
<Route path="about">
<About/>
</Route>
</Router>
);
这可能会帮你检查一下。
在我的例子中,我忘记了我在index.js中添加了一个BrowserRouter组件,然后在app.js中添加另一个。一旦我删除了其中一个,它就起作用了。
相关文章:
- React重新渲染但未显示正确的组件
- 是否有任何JavaScript UI组件可以显示字符串之间的差异
- 自定义HTML元素属性未显示-Web组件
- 带有内置图像对象的Canvas组件构造函数;t显示's图像
- ReactJS组件中显示的视频未更新
- 在另一个文件夹中显示React组件
- 访问要在 React Native Text 组件中显示的对象数组
- 如何使用Vue.js(使用Vueify)通过组件显示数据
- 如何防止其他元素在拖动任何devexpress组件时高亮显示
- <对象>中的 SVG 不会显示在 IE 的 Angular 2 组件中
- 在火狐附加组件面板中显示远程图像
- Twitter Bootstrap v3.0.0 未显示模态组件
- 显示/隐藏 ReactJS 组件而不会丢失其内部状态
- 角度中的组合框(选择组件)不基于参数设置显示值
- 在 ExtJS 组件中显示富文本
- 显示指定秒数的 CSS 组件
- 加载时未显示 JQuery-ui 组件
- 反应/reux + 引导,使组件的模态显示唯一
- Bootstrap v3.2组件显示(折叠水平面板)
- Ext4组件显示