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

React中变量作为数组索引无法访问元素的问题求助

React数组变量索引访问失败问题排查

问题描述

在React项目中,使用变量作为数组索引访问元素时失败,但直接使用数字索引可正常访问,且已确认变量为数字类型。报错信息如下:

Error in /~/src/App.js (144:1)
listaProd[p] is undefined

相关代码

///要访问的数组:
const listaProd = [
  { name: 'Água..........', price: 2.5 },
  { name: 'Coca-cola.......', price: 6 },
  { name: 'Almoço executivo..', price: 25.5 },
  /////其他元素....
];

///需要列出的listaProd索引
const ar = [1, 2];

{ 
  ar.map((p, c) => {
    console.log('-', p);
    /**已确认p为数字1或2 */
    let index = parseInt(p);
    /**确保为数字类型 */
    return (
      <div className="pedido_client" key={c}>
        {/**-----可以正常工作--------*/}
        {listaProd[1].name}

        {/**无法工作 */}
        {listaProd[p].name}

        {/**无法工作 */}
        {listaProd[index].name}

        {/**无法工作 */}
        {listaProd.at(index).name}
      </div>
    );
  })
}

问题原因及解决方案

核心问题出在**listaProd数组的定义时机**:它被声明在组件渲染函数内部、ar.map逻辑之后。当ar.map执行时,listaProd还未完成定义,所以无论用变量还是转换后的索引都无法访问;而直接写listaProd[1].name时,因JSX的渲染特性,这部分代码会在组件后续渲染阶段执行,此时listaProd已存在,因此能正常显示。

解决方法:将listaProd的定义移到ar.map代码之前,确保使用数组时它已经初始化完成。

调整后的关键代码结构:

// 先定义数组,保证map执行时数组已存在
const listaProd = [
  { name: 'Água..........', price: 2.5 },
  { name: 'Coca-cola.......', price: 6 },
  { name: 'Almoço executivo..', price: 25.5 },
  /////其他元素....
];

const ar = [1, 2];

{ 
  ar.map((p, c) => {
    console.log('-', p);
    let index = parseInt(p);
    return (
      <div className="pedido_client" key={c}>
        {listaProd[p].name}
      </div>
    );
  })
}

修改后,变量索引即可正常访问数组元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:40:32