You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在非React页面嵌入带React Router的React应用路由配置问题

解决React Router 3.x嵌入非React页面时路由URL异常问题

问题根源

你遇到的情况是因为React Router 3.x的hashHistory默认会把hash路由直接拼接在域名后(比如test.com#/newPage),而你需要的是域名后带斜杠再附加hash路径(test.com/#/newPage),本质是缺少对路由基础路径的显式声明。

两种可行解决方案

方法1:给Router组件添加basename属性

最简单的方式是直接在Router组件上设置basename="/",明确指定路由的基础路径为根路径,这样hash部分会自动附加在斜杠之后:

import { Router, Route, hashHistory, Link } from 'react-router-dom';

const App = () => (
  <Router history={hashHistory} basename="/">
    <Route path="/" component={Home} />
    <Route path="/newPage" component={NewPage} />
  </Router>
);

// 示例组件
const Home = () => <Link to="/newPage">跳转到新页面</Link>;
const NewPage = () => <h1>新页面</h1>;

方法2:创建自定义hashHistory实例

如果需要更灵活的配置,你可以手动创建hashHistory实例并指定basename参数,再将其传入Router组件:

import { Router, Route, createHashHistory, Link } from 'react-router-dom';

// 创建自定义history实例,设置基础路径为根路径
const customHistory = createHashHistory({
  basename: '/'
});

const App = () => (
  <Router history={customHistory}>
    <Route path="/" component={Home} />
    <Route path="/newPage" component={NewPage} />
  </Router>
);

效果验证

配置完成后,点击React应用内的路由跳转链接,URL会自动变为test.com/#/newPage,完全符合你的预期,同时路由解析也能正常工作。


内容的提问来源于stack exchange,提问作者Learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:01:05