react, material-ui中如何识别是哪一个listitem被点击

发布于 2022-09-03 12:20:47 字数 769 浏览 24 评论 0

我在使用react.js以及material-ui的时候,试图给List里的ListItem添加touchTap事件, 回调方法中无法从event对象里获取到底是哪一个ListItem被点击了, 有什么解决方法吗?


// event handler
handleListItemCLick = e => {
        console.log(e);
}
configsToListItems = (configs) => {
        return this.listItems = configs.map((value, index) => {
            const listItem = <ListItem
                key={index}
                data={value}
                onTouchTap={this.handleListItemCLick}
                primaryText={value.remarks || 'unnamed'}
                secondaryText={value.server}
            />
            return listItem
        })
    }

我尝试过在listItem里添加data这个prop给ListItem. 但是event对象里无法识别出是哪一个ListItem被点击的. 上面的代码中有注释的函数就是事件处理器.
求大神给出姿势。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

与君绝 2022-09-10 12:20:47

感觉你这个需求的出发点就错了,你是想获取点击的 target,然后取到相应的 dataprimaryTextsecondaryText这些数据吧。
react 之类的前端 MVx 框架是数据驱动的,没必要去找点击的DOM。
你可以在 onTouchTap={this.handleListItemCLick} 这里调用方法时进行参数传递就行。
onTouchTap={this.handleListItemCLick.bind(this, value)}
handleListItemCLick 方法里的 e 就是 value。

画中仙 2022-09-10 12:20:47

推荐使用匿名函数的方式给 handleListItemCLick 传递一个参数(你点击这个ListItem时需要传递的那个参数,能懂我意思吧 ^_^),然后通过map给每个ListItem都加上:

args = [arg1,arg2,arg3, ...];  // 你遍历时要传递的参数

// ... 其他代码省略

<ListItem onTouchTap={()=>this.handleListItemCLick(args[index])} />

如果你还需要使用句柄对象event,那把它写在最前面,新的参数加在后面:

<ListItem onTouchTap={(e)=>this.handleListItemCLick(e, args[index])} />

希望对你有帮助...

甜柠檬 2022-09-10 12:20:47

onTouchTap={this.handleListItemCLick.bind(this,index)},然后在handleListItemCLick方法中加个参数接受index的值。

丢了幸福的猪 2022-09-10 12:20:47

楼上说的很好了,来晚了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文