You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native Expo:如何让点击的List.item仅触发对应函数,避免批量执行

问题解决方法

1. 给列表项添加唯一Key

React渲染列表时必须为每个元素指定唯一的key属性,否则React会复用组件实例,导致事件绑定混乱,出现点击一个按钮触发多个函数的情况。在你的代码中,给<List.Accordion>添加key={item.id}即可:

<List.Section title="User List" titleStyle={{ fontWeight: "bold" }}>
  {displayUser.length > 0 &&
    displayUser.map((item) => {
      return (
        <List.Accordion
          key={item.id} // 添加唯一key
          title={item.email}
          titleStyle={styles.userItem}
        >
          <List.Item
            title="Ban"
            left={(props) => (
              <MaterialCommunityIcons
                {...props}
                name="cancel"
                size="15"
              />
            )}
            titleStyle={styles.itemText}
            onPress={() => banUser(item.id)}
          />
        </List.Accordion>
      );
    })}
</List.Section>

2. 修正空数组判断逻辑

原代码中displayUser != []的判断是错误的——在JavaScript中,两个数组即使内容相同,引用不同也会返回true,导致空数组时依然进入渲染逻辑。改用displayUser.length > 0来判断数组是否有数据。

3. 检查banUser函数的定义

确保banUser函数正确接收id参数,且没有闭包变量捕获错误的问题。如果banUser是组件内部定义的函数,建议用useCallback包裹,避免每次渲染重新创建函数:

import { useCallback } from 'react';

// 组件内部
const banUser = useCallback((userId) => {
  // 此处编写封禁逻辑,确保只针对传入的userId操作
  console.log('封禁用户:', userId);
}, []);

这样就能保证点击某个用户的Ban按钮时,只会触发对应该用户ID的封禁操作。

内容的提问来源于stack exchange,提问作者danie1r

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 06:12:13