reactjs - 如何使用键获取对列表中元素的引用?
问题描述
一个简单的问题,我找不到一个好的答案。
我有一个非常大的项目列表(> 1000,可能大于 10k)。其中每一个都有一个唯一的密钥。是否可以仅通过知道元素的键来获取元素的引用?
我当然可以自己生成参考,但这需要我自己维护一个参考列表。一般来说,这没什么大不了的,但是由于列表很大,如果有一种方法可以仅从键中获取 ref,它可能会更有效。
解决方案
key prop 由 React 内部使用,并且永远不会放在 DOM 节点上,因此您不能使用它来查询 DOM,但您可以将它放在 data 属性中并使用它来代替查询。
例子
class App extends React.Component {
state = {
items: ["foo", "bar", "baz"]
};
handleClick = event => {
const { key } = event.target.dataset;
document.querySelectorAll(`input[data-key="${key}"]`)[0].focus();
};
render() {
return (
<div>
{this.state.items.map(item => (
<div key={item}>
<input data-key={item} value={item} />
<button data-key={item} onClick={this.handleClick}>
Focus
</button>
</div>
))}
</div>
);
}
}
ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>
推荐阅读
- java - -1+ (int) 是什么意思?
- filter - 分组后如何按父值过滤结果?
- javascript - 通过页面上的某个点后隐藏 div 的 JavaScript
- javascript - 无法分配类型的值(又名“数组”
>') 到 (又名'字典 ') - blazor - 将 Blazor .NET 6 WASM 部署到 GitHub 页面
- snowflake-cloud-data-platform - 在 Snowflake 中的表上创建流时出错
- python - 如何在包的命名空间中隐藏内部模块?
- javascript - 我在 javascript html 中遇到断行问题
- javascript - 如何跟踪 React Native 的索引和更新句柄更改(Native-Base Tabs)
- vaadin - Vaadin 21 流。如何迁移曾经有一个带边框的面板的 CustomLayout