我正在尝试将路由器上下文传递给sidebar
组件。我收到此错误。在react中,<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>
);
发布于 2018-03-01 07:47:38
正确的方法是使用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
。
发布于 2018-03-02 01:07:10
您可以从react-router使用withRouter HOC。
import React from 'react'
import PropTypes from 'prop-types'
import { withRouter } from 'react-router'
const Sidebar = withRouter((props, context) => {...})
https://stackoverflow.com/questions/49043862
复制相似问题