一个 在BrowserRouter中可能只有一个子元素
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个 在BrowserRouter中可能只有一个子元素相关的知识,希望对你有一定的参考价值。
我试图将路由器上下文传递给sidebar
组件我收到此错误一个<Router>
可能只有一个子元素错误的反应。
return (
<BrowserRouter>
{({ router }) => (
<div style={{ display: 'flex', flex: '1' }}>
{isAuthenticated &&
<Sidebar
router={router}
rooms={currentUserRooms}
onLogoutClick={this.handleLogout}
/>
}
<MatchAuthenticated exactly pattern="/" component={Home} {...authProps} />
<RedirectAuthenticated pattern="/login" component={Login} {...authProps} />
<RedirectAuthenticated pattern="/signup" component={Signup} {...authProps} />
<MatchAuthenticated pattern="/r/:id" component={Room} {...authProps} />
<Switch component={NotFound} />
</div>
)}
</BrowserRouter>
);
答案
正确的方法是使用context
,而不是通过router
作为道具。
return (
<BrowserRouter>
<div style={{ display: 'flex', flex: '1' }}>
{isAuthenticated &&
<Sidebar
rooms={currentUserRooms}
onLogoutClick={this.handleLogout}
/>
}
<MatchAuthenticated exactly pattern="/" component={Home} {...authProps} />
<RedirectAuthenticated pattern="/login" component={Login} {...authProps} />
<RedirectAuthenticated pattern="/signup" component={Signup} {...authProps} />
<MatchAuthenticated pattern="/r/:id" component={Room} {...authProps} />
<Switch component={NotFound} />
</div>
</BrowserRouter>
);
像这样定义Sidebar
:
import React from 'react'
import PropTypes from 'prop-types'
const Sidebar = (props, context) => {...}
Sidebar.contextTypes = {
router: PropTypes.object,
}
从Sidebar
,然后访问context.router
。
另一答案
您可以使用react-router中的withRouter HOC。
import React from 'react'
import PropTypes from 'prop-types'
import { withRouter } from 'react-router'
const Sidebar = withRouter((props, context) => {...})
以上是关于一个 在BrowserRouter中可能只有一个子元素的主要内容,如果未能解决你的问题,请参考以下文章