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

React中useState无法存储输入框最后一个字符的问题求助

React输入框最后一个字符不显示的问题修复

问题根源

你的代码存在几个关键错误,直接导致输入框值与状态不同步:

  • handleChange函数参数定义错误:React的onChange回调接收的是事件对象e,而非直接传入value,这会导致后续访问e.target时出现异常。
  • 输入框value绑定错误:selectedData是对象类型,直接绑定会让输入框无法正确读取phone字段的值,必须指定绑定selectedData.phone(加|| ''避免初始为空时显示undefined)。
  • 同步打印状态无法获取新值:React的setState是异步操作,你在更新后立即打印selectedData,只能拿到更新前的旧值。

修复后的代码

import React, { useState } from 'react'

export const terr = () => {
    const [selectedData, setSelectedData] = useState({})

    const handleChange = (e) => {
        const { name, value } = e.target;
        console.log(`输入的值: ${value}`);
        setSelectedData(prevState => ({
            ...prevState,
            [name]: value
        }));
    };

    return (
        <div>
            <input 
                name="phone" 
                value={selectedData.phone || ''} 
                onChange={handleChange} 
            />
        </div>
    )
}

额外说明

如果需要在状态更新后执行逻辑(比如打印最新状态),可以用useEffect监听状态变化:

import React, { useState, useEffect } from 'react'

export const terr = () => {
    const [selectedData, setSelectedData] = useState({})

    const handleChange = (e) => {
        const { name, value } = e.target;
        setSelectedData(prevState => ({
            ...prevState,
            [name]: value
        }));
    };

    useEffect(() => {
        console.log(`更新后的selectedData: `, selectedData);
    }, [selectedData]);

    return (
        <div>
            <input 
                name="phone" 
                value={selectedData.phone || ''} 
                onChange={handleChange} 
            />
        </div>
    )
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 04:16:22