Javascript 反应路由器链接渲染#/而不是/

Javascript 反应路由器链接渲染#/而不是/,javascript,reactjs,react-router,url-routing,isomorphic-javascript,Javascript,Reactjs,React Router,Url Routing,Isomorphic Javascript,我有以下使用ReactRouter的组件: “严格使用” 从“React”导入React 从“../../Elements/Container.jsx”导入容器 从“../../Collections/Menu.jsx”导入菜单 从“../../Elements/Item.jsx”导入项 从“反应路由器”导入{Link} 常量边栏=()=>{ 返回( 家 路线图 贝塔 索夫雷 ) } 导出默认边栏 当我运行应用程序并查看源代码时,链接组件分别呈现为localhost:3000/#/和local

我有以下使用ReactRouter的组件:

“严格使用”
从“React”导入React
从“../../Elements/Container.jsx”导入容器
从“../../Collections/Menu.jsx”导入菜单
从“../../Elements/Item.jsx”导入项
从“反应路由器”导入{Link}
常量边栏=()=>{
返回(
家
路线图
贝塔
索夫雷
)
}
导出默认边栏
当我运行应用程序并查看源代码时,链接组件分别呈现为
localhost:3000/#/
localhost:3000/#/roadmap
,而不是
localhost:3000/
localhost:3000/roadmap
,这是意外行为。可能是什么

注意:我使用的是同构,它似乎与这种意外行为有关。我在我的浏览器控制台上获得以下信息:

警告:React试图重用容器中的标记,但 校验和无效。这通常意味着您正在使用服务器 在服务器上生成的呈现和标记不是 客户正在期待。React注入新标记以补偿 工作正常,但您已经失去了服务器渲染的许多好处。 相反,请找出生成的标记在 客户端或服务器:

服务器端:


“严格使用”
从“express”导入express
从“React”导入React
从'react dom/server'导入{renderToString}
从“react router”导入{RoutingContext,match,browserHistory}
从“history/lib/createLocation”导入createLocation
从“../app/components/Pages/Main/routes.js”导入路由
让server=express()
server.use((请求、响应)=>{
让l=createLocation(request.url)
匹配({routes,location:l},(错误,重定向位置,renderProps)=>{
如果(错误)
响应。发送(500,错误。消息)
else if(重定向位置)
response.redirect(302,redirectLocation.pathname+redirectLocation.search)
else if(渲染器操作)
response.render('index',{title:'Teste',reactOutput:renderToString()})
其他的
response.send(404,“找不到!”)
})
})
导出默认服务器
注3:

我发现,如果我使用routes.js routesA(JSX语法),链接将返回散列(#/),但如果我使用routesB(普通数组),链接将按预期返回(/)。如何使用JSX语法并返回正确的URL?

您使用的是什么版本的react router

如果您仍在使用1.0.x,请检查stackoverflow及其GitHub

我碰巧也遇到了这个问题,发现我仍然在使用npm上的最新版本1.0.3

然而,GitHub和docs上的react router的最新版本适用于2.0.x


您可以使用以下npm命令将react路由器版本更新为beta版(当前为2.0.0-rc4):
npm安装--save react-router@beta

能否显示路由器声明的代码<代码>链接根据使用的
历史记录
获取url格式。@joshdavidimiller:编辑以插入请求的代码。注意,在客户端我使用browserHistory,但服务器端不支持它。所以我不得不使用createHistory。不管怎样,我不知道历史是如何运作的。你有两种不同的路由器定义的原因吗?为什么服务器不也呈现
站点
组件?没有原因。但服务器似乎无法呈现站点,因为它使用browserHistory。@乔什·戴维米勒:我编辑了很多文章。我现在只使用一个路由器,发现使用JSX语法返回哈希,使用普通数组语法返回预期结果。请重新阅读文章以了解更多信息。事实上,我的react路由器为1.0.3。我有什么办法可以强迫它更新,或者我必须手动更新?做了一些研究。似乎您必须手动从GitHub中提取所有代码。目前无法从npm下载2.0.x版本,因为他们还没有上传。我发现我可以使用命令
npm install--save react进行更新-router@beta
。现在我的路线有问题。如果我解决了这个问题,我会投票给你的答案。
(client) "><a class="" href="#/" data-reactid=".2
(server) "><a class="" href="/" data-reactid=".27