ReactRouter链接渲染#/而不是/
ReactRouter Link rendering #/ instead of /
我有以下使用ReactRouter的组件:
'use strict'
import React from 'react'
import Container from '../../Elements/Container.jsx'
import Menu from '../../Collections/Menu.jsx'
import Item from '../../Elements/Item.jsx'
import {Link} from 'react-router'
const Sidebar = ( ) => {
return (
<Menu className='vertical purple inverted sidebar left'>
<Item><Link to='/home'>Home</Link></Item>
<Item><Link to='/roadmap'>Roadmap</Link></Item>
<Item><Link to='/beta'>Beta</Link></Item>
<Item><Link to='/about'>Sobre</Link></Item>
</Menu>
)
}
export default Sidebar
当我运行我的应用程序并查看源时,Link组件分别呈现为localhost:3000/#/
和localhost:3000/#/roadmap
,而不是localhost:3000/
和localhost:3000/roadmap
,这是意外的行为。它可能是什么?
注意:我使用同构,它似乎与这种意外行为有关。我在我的浏览器控制台上得到了这个:
警告:React试图重用容器中的标记,但校验和无效。这通常意味着您正在使用服务器渲染和在服务器上生成的标记不是客户端正在等待。React注入了新的标记来补偿有效,但您已经失去了服务器渲染的许多好处。相反,要弄清楚为什么生成的标记在客户端或服务器:
(client) "><a class="" href="#/" data-reactid=".2
(server) "><a class="" href="/" data-reactid=".27
注意2:根据要求,以下是我的路由器代码:
路由.js
'use strict'
import React from 'react'
import {browserHistory, Router, Route, IndexRedirect} from 'react-router'
import Page from './Page.jsx'
import Home from './Home.jsx'
import Roadmap from './Roadmap.jsx'
import Beta from './Beta.jsx'
const routesA = (
<Router history={browserHistory>
<Route path='/' component={Page}>
<Route path='home' component={Home} />
<Route path='roadmap' component={Roadmap} />
<Route path='beta' component={Beta} />
<Route path='about' component={undefined} />
<IndexRedirect to='home' />
</Route>
</Router>
)
const routesB = {
path: '/',
history: browserHistory,
component: Page,
indexRedirect: {to: '/home'},
childRoutes: [
{path:'/home', component: Home},
{path:'/roadmap', component: Roadmap},
{path:'/beta', component: Beta},
{path:'/about', component: undefined}
]
}
export default routesA
客户端:
'use strict'
import React from 'react'
import ReactDOM from 'react-dom'
import routes from './components/Pages/Main/routes.js'
ReactDOM.render(routes, document.getElementById('site'))
服务器端:
'use strict'
import express from 'express'
import React from 'react'
import {renderToString} from 'react-dom/server'
import {RoutingContext, match,browserHistory} from 'react-router'
import createLocation from 'history/lib/createLocation'
import routes from '../app/components/Pages/Main/routes.js'
let server = express()
server.use((request, response) => {
let l = createLocation(request.url)
match({routes, location: l}, (error, redirectLocation, renderProps) => {
if(error)
response.send(500, error.message)
else if(redirectLocation)
response.redirect(302, redirectLocation.pathname + redirectLocation.search)
else if (renderProps)
response.render('index', {title: 'Teste', reactOutput: renderToString(<RoutingContext {...renderProps} />)})
else
response.send(404, 'Not found!')
})
})
export default server
注意3:
我发现,如果我使用routes.jsroutesA(JSX语法),链接将返回哈希(#/),但如果我使用routesB(纯数组),链接会按预期返回(/)。如何使用JSX语法并返回正确的URL?
您使用的是什么版本的react路由器?
如果你仍在使用1.0.x,请在stackoverflow上查看这个答案,并在他们的GitHub上查看这个问题。
我碰巧也遇到了这个问题,发现我仍然在使用1.0.3,这是npm上的最新版本。
然而,GitHub和docs上最新版本的react路由器适用于2.0.x.
您可以使用以下npm命令将react router版本更新为测试版(当前为2.0.0-rc4):npm install --save react-router@beta
。
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 如何使用jQuery自动打开页面上的所有链接
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- jquery动画可以通过编程链接吗
- 在单击href链接的同时下载文件
- 尽管链接成功并已成功下载,但未找到NPM模块
- 制作一个不带HTML a标记但在动画播放完毕后指向其他页面的超链接
- ReactJS映射:如何仅在url变量不为空时呈现html链接
- 单击页面上的链接后高度发生变化
- 将纯文本URL转换为可单击链接
- python-selenium-点击上升链接
- 一点javascript元编程&可链接的设置器
- ng视图外的链接重定向到ng视图内的页面
- 如何调用“;链接_;在onclick事件上使用Javascript
- 链接所有<a>Meteor
- 如何在Angular中的表的所有单元格中添加链接
- 通过链接重定向不;我不在jstree中工作
- ReactRouter 2.0.1上下文缺少链接
- ReactRouter链接渲染#/而不是/
- ReactRouter链接动态参数不工作