我有一个 SideNav 组件,它包含动态创建的链接,这些链接需要滚动到相邻 html 表 (InfoTable) 中的相应标题。我尝试了多种不同的方法来实现这一点,但无济于事。
export default class Parent extends Component {
state = {
categories: [],
}
scrollToHeader = (tableRefString) => {
// Function to pass to SideNav to access refs in InfoTable
this[tableRefString].scrollIntoView({ block: 'start' });
}
render() {
return (
<div>
<SideNav
categories={this.state.categories}
scrollToHeader={this.scrollToHeader} />
<InfoTable
categories={this.state.categories} />
</div>
);
}
}
export default class InfoTable extends Component {
render() {
return (
<div>
<table>
<tbody>
{this.props.categories.map(category => (
<>
// Forward the ref through InfoTableHeader to be set on the parent DOM node of each InfoTableHeader
<InfoTableHeader />
{category.inputs.map(input => <InfoTableRow />)}
</>
))}
</tbody>
</table>
</div>
);
}
}
为了单击 SideNav 上的链接并滚动到 InfoTable 上的相应标题,我相信我需要转发基于我的类别数组中的名称在 Parent 上动态创建的引用,并将这些引用设置为每个标题的 DOM 节点信息表。从那里我将一个函数传递给 SideNav,该函数可以访问 Parent 中的 refs,以便滚动到标题。
- 如何一次将多个引用转发到我的 InfoTable 组件?
- 有没有更干净的方法来完成我想要做的事情?我已经研究过 React.findDOMNode() 但 refs 似乎是更好的选择。