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

React设置state后this.state.users为undefined的技术问题

问题分析与解决方案

这问题我太熟了!核心原因是ajax的success回调函数里的this指向不对——你用的是普通函数作为success回调,这里面的this指向的是jQuery ajax请求的上下文对象,不是你的React组件实例!所以你调用的this.setState根本不是组件的setState方法,自然组件的state里的users(还有其他字段)都没被正确设置,后续访问this.state.users就会返回undefined。

给你几个靠谱的解决办法:

方法1:使用箭头函数(最推荐)

箭头函数会继承外层的this指向,也就是你的React组件实例,这样就能正确调用setState了:

$.ajax({
  url: url,
  cache: false,
  success: (data) => { // 改成箭头函数
    console.log(data.employees);
    this.setState({
      users: data.employees,
      employeeId: data.Id,
      firstName: data.firstName,
      lastName: data.lastName,
      email: data.email,
      trialPeriod: data.trialPeriod,
      dayOfStart: data.dayOfStart // 补全你的字段
    });
  }
})

方法2:提前保存组件的this到变量

在ajax调用之前,把组件的this存到比如that或者self变量里,回调里用这个变量访问组件:

const that = this; // 提前保存组件的this
$.ajax({
  url: url,
  cache: false,
  success: function(data) {
    console.log(data.employees);
    that.setState({ // 用that代替this
      users: data.employees,
      employeeId: data.Id,
      firstName: data.firstName,
      lastName: data.lastName,
      email: data.email,
      trialPeriod: data.trialPeriod,
      dayOfStart: data.dayOfStart
    });
  }
})

方法3:用bind绑定this

把success回调函数的this绑定到组件实例上:

$.ajax({
  url: url,
  cache: false,
  success: function(data) {
    console.log(data.employees);
    this.setState({
      users: data.employees,
      employeeId: data.Id,
      firstName: data.firstName,
      lastName: data.lastName,
      email: data.email,
      trialPeriod: data.trialPeriod,
      dayOfStart: data.dayOfStart
    });
  }.bind(this) // 绑定组件的this
})

另外还要提醒你:setState是异步的!如果你在调用setState之后立刻打印this.state.users,也可能拿不到最新值。如果需要在state更新后做操作,要用到setState的第二个回调函数:

this.setState({
  // 你的state字段
}, () => {
  // 这里可以拿到更新后的state
  console.log(this.state.users);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 02:23:24