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

React循环中从类组件向子组件传递handler报handleDeleteUser读取错误

问题原因
  • 核心问题是this指向丢失:你在User.data.map遍历中使用了普通匿名函数作为回调,普通函数的this不会继承外层React组件实例的上下文,在严格模式下默认指向undefined,因此调用this.handleDeleteUser时会抛出找不到属性的报错。
  • 次要问题:你在定义click回调时接收的参数是事件对象e,但子组件调用props.click(props.id)时传递的是用户id,参数类型不匹配,在this问题解决后也会出现逻辑错误。
解决方案

方案1:将map回调改为箭头函数(最推荐)

箭头函数会自动继承外层作用域的this指向,无需额外绑定,同时修改参数名匹配子组件传值:

// User.js render 部分代码
User.data.map((User, i) => {
  return (
    <DropDownUserTool
      id={User.id}
      click={(id) => {
        this.handleDeleteUser(id);
      }}
    />
  );
});

方案2:为map回调指定this指向

如果要保留普通函数写法,可以给map方法传入第二个参数作为回调的this上下文:

// User.js render 部分代码
User.data.map(function (User, i) {
  return (
    <DropDownUserTool
      id={User.id}
      click={(id) => {
        this.handleDeleteUser(id);
      }}
    />
  );
}, this); // 此处传入组件实例作为回调内部的this

方案3:简化传值(可选优化)

handleDeleteUser已经用类属性箭头函数的方式定义,本身已经绑定了组件实例的this,可以直接传递函数本身,无需额外包一层箭头函数:

// User.js render 部分代码
User.data.map((User, i) => {
  return (
    <DropDownUserTool
      id={User.id}
      click={this.handleDeleteUser}
    />
  );
});

子组件无需修改原有调用逻辑即可正常运行。

内容的提问来源于stack exchange,提问作者Jack The Baker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:09:00