下面是我的父组件,其中包含来自循环的多个输入。我怎样才能选择一个 input
来聚焦?在这种情况下,我是否必须创建动态 ref
?
class TestRef extends React.Component {
ref = React.createRef();
state = {
data: [
{
name: "abc"
},
{ name: "def" }
]
};
focusInput = () => this.ref.current.focus();
render() {
return (
<div>
{this.state.data.map(o => {
return <Hello placeholder={o.name} ref={this.ref} />;
})}
<button onClick={this.focusInput}>focus input 1</button>
<button onClick={this.focusInput}>focus input 2</button>
</div>
);
}
}
原文由 Alisa T Morgan 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以使用 回调引用 来生成每个输入的动态引用并将其存储在数组中。现在您可以使用 ref 的索引来引用它们:
如果列表不是静态的,并且项目可能会被删除/替换,您可能应该使用 WeakMap 来保存引用,或者通过常量添加引用的任何其他方法
id
。您还应该在使用 ref 之前进行检查,因为它可能不存在: