Tam*_*gár 0 reactjs react-router
这些都是非常基本的问题,但是文档universal-router
并没有解释这个问题,它给出的例子似乎在我的React项目中没有用.
我有这个index.js
:
import Router from 'universal-router';
import { HomeComponent, HelpComponent, AboutComponent } from './home.jsx';
const routes = [
{ path: '/', action: () => <HomeComponent /> },
{ path: '/home', action: () => <HomeComponent /> },
{ path: '/about', action: () => <AboutComponent /> },
{ path: '/help', action: () => <HelpComponent /> },
{ path: '*', action: () => <h1>Nope.</h1> }
];
const router = new Router(routes);
router.resolve({ path: '/' }).then(component => {
ReactDOM.render(component, document.getElementById('router-outlet'));
});
router.resolve({ path: '/help' }).then(component => {
ReactDOM.render(component, document.getElementById('router-outlet'));
});
router.resolve({ path: '/about' }).then(component => {
ReactDOM.render(component, document.getElementById('router-outlet'));
});
Run Code Online (Sandbox Code Playgroud)
这在我的App
组件中,一个非常简单的菜单:
export class App extends React.Component {
render() {
return(
<div>
<a href="/">Root</a> |
<a href="/home">Home</a> |
<a href="/help">Help</a> |
<a href="/about">About</a> |
<a href="/uijsklfdsse">404</a>
</div>
);
}
}
Run Code Online (Sandbox Code Playgroud)
如你所见,这非常简单,我只想弄清楚如何使这个工作.它几乎就是这里写的,但它不起作用.出于某种原因,它始终AboutComponent
被调用,并且当我点击链接时,浏览器似乎刷新整个页面,因此它不像SPA那样.我有一种感觉,我将路线定义放在错误的地方,但我应该把它放在哪里?这是我应该如何定义链接?
我正在使用,universal-router
因为React-router
在安装时说它被弃用并被这个东西取代.如果这是一个坏主意,请告诉我.
小智 6
你的路线看起来很好.您可以通过处理默认href行为来阻止浏览器刷新.即onClick(event) { event.preventDefault(); }
要使用窗口历史记录API和管理推送状态,您可以使用我推荐的历史插件,或者您可以手动或使用其他插件进行操作.
为了使您的路由器更加灵活,您可以使用函数动态地解析路由,这样您就可以随时调用它.
代替
router.resolve({ path: '/' }).then(component => {
ReactDOM.render(component, document.getElementById('router-outlet'));
});
router.resolve({ path: '/help' }).then(component => {
ReactDOM.render(component, document.getElementById('router-outlet'));
});
router.resolve({ path: '/about' }).then(component => {
ReactDOM.render(component, document.getElementById('router-outlet'));
});
Run Code Online (Sandbox Code Playgroud)
你可以做
const router = new Router(routes);
function renderRoute(location) {
router.resolve({ path: location.pathname }).then(component => {
render(component, document.getElementById('router-outlet'));
});
}
renderRoute(window.location);
Run Code Online (Sandbox Code Playgroud)
然后renderRoute
在窗口路径发生变化时调用.
随着history
,它使通过提供一个监听器和其他一些有用的功能更容易些.您所要做的就是创建一个实例并在整个应用程序中使用它.
在某个地方制作单身人士(即history.js
)
import createHistory from 'history/createBrowserHistory';
export default createHistory();
Run Code Online (Sandbox Code Playgroud)
并将其用于导航
...
import history from './history.js';
export class App extends React.Component {
handleClick(event) {
event.preventDefault();
history.push({
pathname: event.currentTarget.pathname
});
}
render() {
return(
<div>
<a href="/" onClick={this.handleClick}>Root</a> |
<a href="/home" onClick={this.handleClick}>Home</a> |
...
</div>
);
}
}
Run Code Online (Sandbox Code Playgroud)
和路由索引
import history from './history.js'
...
renderRoute(history.location);
history.listen(renderRoute);
Run Code Online (Sandbox Code Playgroud)
如果你想了解更多信息,这个方法可以更深入一些.
归档时间: |
|
查看次数: |
1197 次 |
最近记录: |