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

React中LocalStorage无法保存表单数据,仅存空对象问题排查

问题解决方案

问题出在onChangeInput函数的解构赋值逻辑上:

const { name, text } = e.target;

你错误地使用了text属性来获取输入框内容,但HTML输入元素的实际输入值是存储在value属性中的,text并非input元素的标准属性。这导致你给状态赋值的是undefined,values始终保持初始的{ email: "", password: "" },最终存入localStorage的就是空对象(JSON.stringify处理后显示为{})。

修正方法

把解构中的text替换为value即可:

const onChangeInput = (e) => {
    const { name, value } = e.target;
    setValue(pvalue => ({
        ...pvalue,
        [name]: value,
    }));
};

修正后的完整代码

const Signin = () => {

    const [values, setValue] = useState({ email: "", password: "" });

    const onChangeInput = (e) => {
        const { name, value } = e.target;
        setValue(pvalue => ({
            ...pvalue,
            [name]: value,
        }));

    };

    function handleSubmit(e) {
        e.preventDefault()
        localStorage.setItem('items', JSON.stringify(values));
    };


    return (
        <div>
            <form onSubmit={handleSubmit}>
                <p>
                    <label>Email address:</label><br />
                    <input
                        name="email"
                        value={values.email}
                        onChange={onChangeInput}
                    />
                </p>
                <p>
                    <label>Password:</label><br />
                    <input
                        name="password"
                        value={values.password}
                        onChange={onChangeInput}
                    />
                </p>
                <p>
                    <button id="btn" type="submit">Register</button>
                </p>
            </form>
        </div>
    );
}

export default Signin;

修改后,输入框内容会正确同步到values状态,提交表单时就能将完整的用户输入存入localStorage。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:52:55