我有一个包含子侧边栏组件的地图组件。我正在尝试执行一项相对简单的任务,即在单击地图标记时滚动到侧边栏中的位置列表中的位置。但是,因为侧边栏需要包裹在withRouter
and中connect
,所以我无法(ref) => this.sidebar = ref
在地图组件中设置 ref。
export class Map extends React.Component {
...
handleClick() {
this.sidebar.scrollToPlace(place.id);
}
render () {
return (
<MapSidebar
// unable to set ref
/>
)
}
}
和
class MapSidebar extends React.Component {
...
scrollToPlace(id) {
this.refs[id].scrollIntoView({block: 'end', behavior: 'smooth'});
}
}
export default withRouter(connect(mapStateToProps, mapDispatchToProps)(MapSidebar));
我知道 usingwrappedComponentRef
可以让我获得 的内容withRouter
,但是我仍然需要connect
处理。
MapSidebar
我还尝试在实例上创建自定义引用:
<MapSidebar
getReference={(ref) => {
this.sidebar = ref;
}} />
然后在MapSidebar
类构造函数中,调用:
if(this.props.getReference) {
this.props.getReference(this);
}
但这导致该组件更新的无限循环(尽管我不确定我理解为什么)。
有没有更好的方法来解决这些问题?