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

React中快速输入TextField导致页面崩溃的问题求助

问题:React TextField快速输入时页面崩溃白屏

快速在TextField中输入内容时网站崩溃显示空白白屏,仅快速输入时出现该问题,慢速输入无异常。控制台报错:

Uncaught TypeError: Cannot read properties of null (reading 'value')

错误指向代码行:tempItems[index][0] = event.currentTarget.value;

相关代码

TextField组件

<TextField
    label="Item name"
    variant="filled"
    required
    color="primary"
    onChange={handleItemNameChange}
    id={`${id}`}
    defaultValue={items[id][0]}
/>

handleItemNameChange函数

const handleItemNameChange = (event) => {
    let index = event.currentTarget.id;
    setItems((items) => {
        const tempItems = [...items];
        tempItems[index][0] = event.currentTarget.value;
        return tempItems;
    });
};

问题原因

React的合成事件采用事件池化机制,事件对象会被复用或回收。setItems的回调是异步执行的,当快速输入触发多次onChange时,事件对象可能已经被React回收,此时event.currentTarget会变为null,导致读取value时抛出错误。

解决方案

在setItems回调外部提前提取event.currentTarget的id和value,保存到普通变量中,再在回调里使用这些变量:

const handleItemNameChange = (event) => {
    const index = event.currentTarget.id;
    const newValue = event.currentTarget.value; // 提前提取需要的值
    setItems((items) => {
        const tempItems = [...items];
        tempItems[index][0] = newValue; // 使用提前保存的变量
        return tempItems;
    });
};

这样即使事件对象被回收,提前保存的index和newValue依然有效,不会出现null读取错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 04:10:35