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

React提交表单时为何将TextField值存入query params?

问题解决:React登录表单提交时凭证出现在URL Query参数中

问题原因

你的按钮设置为type="submit"且嵌套在<form>标签内,点击时会触发HTML表单的默认GET提交行为,浏览器会自动将表单字段拼接成URL Query参数,这是原生HTML的默认行为,和React无关。你提到用了preventDefault但无效,是因为当前的handleLogin函数没有接收表单提交的事件对象,自然无法阻止默认行为。

另外你的状态初始化存在小问题:useState([])应该改为useState(""),登录名和密码是字符串类型,不是数组。

解决方案(任选其一即可)

方案1:在点击事件中阻止默认行为

修改handleLogin函数,接收事件参数并调用preventDefault():

const handleLogin = async (e) => {
    e.preventDefault(); // 阻止表单默认提交行为
    const response = await tryLogIn(login, pass);
    alert(response);
    if(response){
        navigate("/main");
    } else {
        alert('bad');
    }
}

方案2:将按钮类型改为button

直接把按钮的type从submit改成button,避免触发表单默认提交:

<Button
    type="button"
    fullWidth
    variant="contained"
    sx={{ mt: 3, mb: 2 }}
    onClick={handleLogin}
>
    Log in
</Button>

方案3:绑定表单的onSubmit事件(更规范的做法)

把登录逻辑绑定到<form>的onSubmit事件上,替代按钮的onClick:

// 定义表单提交处理函数
const handleSubmit = async (e) => {
    e.preventDefault();
    const response = await tryLogIn(login, pass);
    alert(response);
    if(response){
        navigate("/main");
    } else {
        alert('bad');
    }
}

// 渲染部分修改form属性
<Box component="form" noValidate sx={{ mt: 1 }} onSubmit={handleSubmit}>
    {/* 保持TextField不变 */}
    <Button
        type="submit"
        fullWidth
        variant="contained"
        sx={{ mt: 3, mb: 2 }}
    >
        Log in
    </Button>
</Box>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 13:00:07