实现方案
- 创建Refs对象:在组件中创建一个
ref
对象,用于存储列表项的引用。
- 绑定事件委托:在列表的父元素上绑定点击事件,利用事件委托机制,减少事件绑定数量。
- 获取点击项数据:在点击事件处理函数中,通过
event.target
找到被点击的列表项,并从ref
对象中获取该项对应的数据。
主要代码片段
import React, { useRef } from'react';
const DynamicList = () => {
const listRefs = useRef({});
const dataList = [
{ id: 1, value: 'Item 1' },
{ id: 2, value: 'Item 2' },
{ id: 3, value: 'Item 3' }
];
const handleClick = (event) => {
const targetId = event.target.dataset.id;
const clickedData = listRefs.current[targetId];
if (clickedData) {
// 进行相应处理,例如打印数据
console.log('Clicked data:', clickedData);
}
};
return (
<ul onClick={handleClick}>
{dataList.map(item => (
<li
key={item.id}
data-id={item.id}
ref={el => listRefs.current[item.id] = item}
>
{item.value}
</li>
))}
</ul>
);
};
export default DynamicList;