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

React JSX嵌套map结合filter出现Cannot read properties of undefined错误

React嵌套map中TypeError: Cannot read properties of undefined (reading 'state') 解决方法

错误根源

你在第一个map中使用了普通函数function(item, i),这类函数会创建独立的this上下文,不再指向React组件实例,导致嵌套代码里访问this.state时出现undefined错误。

另外还有一处逻辑错误:filter条件client.includes(item)不成立,因为client是对象(示例中为{site: 'site1', client: 'client1'}),应该通过client.client === item来匹配客户端名称。

修复后的代码

<Col xs="12" sm="12" md="12" lg="12">
    <Row>
        {this.state.watchdog ?
            // 替换为箭头函数,继承外层组件的this指向
            this.state.uniqueClients.map((item, i) => {
                // 提前筛选数据,减少重复计算
                const filteredData = this.state.watchdog.filter(client => client.client === item);
                return (
                    <li key={i}>{item}
                        {filteredData.map((filteredClient, idx) => (
                            <React.Fragment key={idx}>
                                <DataGrid id={`grid-container-${i}-${idx}`}
                                    dataSource={filteredClient}
                                    keyExpr="ID"
                                    showBorders={true}
                                >
                                    <Column dataField="Prefix" width={70} caption="Title" />
                                    <Column dataField="FirstName" />
                                    <Column dataField="LastName" />
                                    <Column dataField="Position" width={170} />
                                    <Column dataField="State" width={125} />
                                    <Column dataField="BirthDate" dataType="date" />
                                    <MasterDetail
                                        enabled={true}
                                        component={DetailTemplate}
                                    />
                                </DataGrid>
                            </React.Fragment>
                        ))}
                    </li>
                )
            })
            : null}
    </Row>
</Col>

额外优化点

  • 给内部React.Fragment添加唯一key,避免React渲染警告
  • 给DataGrid的id添加索引后缀,避免DOM元素id重复
  • 若组件是类组件,可在构造函数中绑定第一个map的函数(不过箭头函数更简洁);若是函数组件,建议用useMemo缓存筛选后的filteredData提升性能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 12:05:43