路由在 Reactjs + ES6 中不起作用
Routing is not working in Reactjs + ES6
当我点击 link "cake" 时出现路径不匹配或服务器无法找到的错误。
这是我的 3 个文件的代码 - 路由器、导航和详细信息组件
Routers.js- 处理路由的组件
import React from 'react';
import ReactDOM from 'react-dom';
import { Router, Route , HashHistory , IndexRoute , useRouterHistory} from 'react-router';
import History from 'history';
import {CreateHashHistory} from 'history';
import createBrowserHistory from 'history/lib/createBrowserHistory';
import { browserHistory } from 'react-router';
import Base from './Base.jsx';
import ListDetail from './ListDetail.jsx';
let Routes =
<Router history={browserHistory}>
<Route path="/" component={Base} >
<Route path="/cake" component= {ListDetail}></Route>
</Route>
</Router>
export default Routes;
导航组件 - 处理导航 links
import React from 'react';
import ReactDOM from 'react-dom';
import { Link } from 'react-router';
class ContentList extends React.Component {
render(){
return(
<div id="innercontent">
<h2>What you love?</h2>
<ul >
<Link to={'/cake'}>Cakes</Link>
<Link to={'/icecream'}>icecream</Link>
<Link to={'/browin'}>browin</Link>
</ul>
</div>
)
}
}
export default ContentList;
详细信息组件 - 要显示的详细信息页面
import React from 'react';
import ReactDOM from 'react-dom';
class ListDetail extends React.Component {
render(){
return(
<div>
<h1>hi Details</h1>
</div>
)
}
}
export default ListDetail;
Base.JSX
import React from 'react';
import ReactDOM from 'react-dom';
import Header from './header.jsx';
import Footer from './footer.jsx';
import ContentList from './contentList.jsx';
import FormElement from './form.jsx';
import ListDetail from './ListDetail.jsx';
class Base extends React.Component {
render(){
return(
<div>
<Header name="My Recipe Book"/>
<section id="content">
<FormElement />
<ContentList />
</section>
<Footer />
<ListDetail />
</div>
)
}
}
导出默认基础;
Main.jsx
import React from 'react';
import ReactDOM from 'react-dom';
import Routes from './router.jsx';
ReactDOM.render(Routes, document.getElementById('app'));
感谢帮助!!
您不需要 /cake
中的 /,它已经在 /
中。这样做:
<Route path="cake" component={ListDetail} />
尝试以下方法,不确定是否有帮助。
1. 使用
var ContentList = React.createClass({})
而不是
class ContentList extends React.Component.
2。删除路由路径中 'cake' 之前的 /。
尝试使用
var Routes = React.createClass({
render: function() {
return (
<div>
<Router history={browserHistory}>
和你更新的代码而不是 let
希望对您有所帮助
它可以与 hashHistory 一起使用吗?
要使用 browserHistory,您需要设置服务器端渲染。
这是教程(尤其是第 11 课和第 13 课),它帮助我理解和设置使用 browserHistory 和服务器端渲染的 react-router:
https://github.com/reactjs/react-router-tutorial/tree/master/lessons/
希望对您有所帮助。
你的 base.jsx 文件的渲染函数应该是这样的:
render(){
return(
<div>
<Header name="My Recipe Book"/>
<section id="content">
<FormElement />
<ContentList />
{this.props.children}
</section>
<Footer />
</div>
)
}
路线应该是
<Route path="cake" component= {ListDetail} />
和 link :
<Link to="cake">Cakes</Link>
您需要在某处渲染路线。
...路由匹配URL时要渲染的单个组件。它可以由具有 this.props.children 的父路由组件呈现。 Read this.
const routes = (
<Route path="/" component={App}>
<Route path="groups" component={Groups} />
<Route path="users" component={Users} />
</Route>
)
class App extends React.Component {
render () {
return (
<div>
{/* this will be either <Users> or <Groups> */}
{this.props.children}
</div>
)
}
}
当我点击 link "cake" 时出现路径不匹配或服务器无法找到的错误。
这是我的 3 个文件的代码 - 路由器、导航和详细信息组件
Routers.js- 处理路由的组件
import React from 'react';
import ReactDOM from 'react-dom';
import { Router, Route , HashHistory , IndexRoute , useRouterHistory} from 'react-router';
import History from 'history';
import {CreateHashHistory} from 'history';
import createBrowserHistory from 'history/lib/createBrowserHistory';
import { browserHistory } from 'react-router';
import Base from './Base.jsx';
import ListDetail from './ListDetail.jsx';
let Routes =
<Router history={browserHistory}>
<Route path="/" component={Base} >
<Route path="/cake" component= {ListDetail}></Route>
</Route>
</Router>
export default Routes;
导航组件 - 处理导航 links
import React from 'react';
import ReactDOM from 'react-dom';
import { Link } from 'react-router';
class ContentList extends React.Component {
render(){
return(
<div id="innercontent">
<h2>What you love?</h2>
<ul >
<Link to={'/cake'}>Cakes</Link>
<Link to={'/icecream'}>icecream</Link>
<Link to={'/browin'}>browin</Link>
</ul>
</div>
)
}
}
export default ContentList;
详细信息组件 - 要显示的详细信息页面
import React from 'react';
import ReactDOM from 'react-dom';
class ListDetail extends React.Component {
render(){
return(
<div>
<h1>hi Details</h1>
</div>
)
}
}
export default ListDetail;
Base.JSX
import React from 'react';
import ReactDOM from 'react-dom';
import Header from './header.jsx';
import Footer from './footer.jsx';
import ContentList from './contentList.jsx';
import FormElement from './form.jsx';
import ListDetail from './ListDetail.jsx';
class Base extends React.Component {
render(){
return(
<div>
<Header name="My Recipe Book"/>
<section id="content">
<FormElement />
<ContentList />
</section>
<Footer />
<ListDetail />
</div>
)
}
}
导出默认基础;
Main.jsx
import React from 'react';
import ReactDOM from 'react-dom';
import Routes from './router.jsx';
ReactDOM.render(Routes, document.getElementById('app'));
感谢帮助!!
您不需要 /cake
中的 /,它已经在 /
中。这样做:
<Route path="cake" component={ListDetail} />
尝试以下方法,不确定是否有帮助。 1. 使用
var ContentList = React.createClass({})
而不是
class ContentList extends React.Component.
2。删除路由路径中 'cake' 之前的 /。
尝试使用
var Routes = React.createClass({ render: function() { return ( <div> <Router history={browserHistory}>
和你更新的代码而不是 let
希望对您有所帮助
它可以与 hashHistory 一起使用吗?
要使用 browserHistory,您需要设置服务器端渲染。
这是教程(尤其是第 11 课和第 13 课),它帮助我理解和设置使用 browserHistory 和服务器端渲染的 react-router: https://github.com/reactjs/react-router-tutorial/tree/master/lessons/
希望对您有所帮助。
你的 base.jsx 文件的渲染函数应该是这样的:
render(){
return(
<div>
<Header name="My Recipe Book"/>
<section id="content">
<FormElement />
<ContentList />
{this.props.children}
</section>
<Footer />
</div>
)
}
路线应该是
<Route path="cake" component= {ListDetail} />
和 link :
<Link to="cake">Cakes</Link>
您需要在某处渲染路线。
...路由匹配URL时要渲染的单个组件。它可以由具有 this.props.children 的父路由组件呈现。 Read this.
const routes = (
<Route path="/" component={App}>
<Route path="groups" component={Groups} />
<Route path="users" component={Users} />
</Route>
)
class App extends React.Component {
render () {
return (
<div>
{/* this will be either <Users> or <Groups> */}
{this.props.children}
</div>
)
}
}