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

React中创建同长状态数组报错:'ingredients'未定义

问题解决:'ingredients' is not defined 报错

错误原因

你在构造函数里初始化array时,直接写了ingredients.length,但这里的ingredients根本不是一个已定义的变量——此时你只是在给this.state添加ingredients属性,还没完成赋值,自然找不到这个变量。而且就算能访问,初始的ingredients是空数组,array也会是长度为0的数组,之后接口返回数据后它也不会自动同步更新。

修复方案

直接在接口请求成功后,同步更新array即可,这样能保证array的长度和返回的配料数组完全匹配:

修改componentDidMount中的代码:

componentDidMount = () => {
  axios.get("https://localhost:2000/toppings")
    .then((response) => this.setState({
       ingredients: response.data,
       array: new Array(response.data.length).fill(false)
    })).catch(err => console.log(err))
}

同时构造函数里的array可以初始化为空数组,避免不必要的错误:

constructor(){
  super();
  this.state = {
    ingredients:[],
    array: []
  };
}

补充说明

如果之后需要在ingredients变化时(比如用户手动添加配料)同步更新array,可以用componentDidUpdate钩子来监听ingredients的变化,再更新array:

componentDidUpdate(prevProps, prevState) {
  if (prevState.ingredients.length !== this.state.ingredients.length) {
    this.setState({
      array: new Array(this.state.ingredients.length).fill(false)
    });
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:35:32