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

Remix项目路由无法获取formData的问题及解决方法

Remix项目中表单提交后action函数无法获取formData的问题修复

问题描述

开发Remix项目时,React组件提交表单后,路由的action函数中使用formData.get()无法获取任何字段,日志显示formData为空对象:

formData
formData {}

路由代码

export async function action(data: any) {
    const { request } = data;

    console.log(`request`);
    console.log(request);

    const formData = await request.formData();

    console.log(`formData`);
    console.log(formData);
    
    const noteData: Note = {
        title: formData.get("title")?.toString() ?? "",
        description: formData.get("description")?.toString() ?? "",
    };
    const note = createNote(noteData);
    console.log(`New note created => Note - ${JSON.stringify(note)}`);
}

提交表单的React组件代码

export default function Note() {
    return (
        <form method="post" action="/notes" id="quote-form">
            <p>
                <label htmlFor="title">Title</label>
                <input type="text" id="title" name="title" required />
            </p>
            <p>
                <label htmlFor="content">Content</label>
                <textarea id="content" name="content" required />
            </p>
            <div>
                <button> Add Note </button>
            </div>
        </form>
    );
}

修复方案

1. 修正字段名不匹配

组件中textarea的name属性是content,但action函数里尝试获取description字段,两者不匹配导致无法拿到对应值。可二选一修改:

  • 要么修改action中的字段名:
    const noteData: Note = {
        title: formData.get("title")?.toString() ?? "",
        description: formData.get("content")?.toString() ?? "",
    };
    
  • 要么修改组件中textarea的name为description:
    <textarea id="content" name="description" required />
    

2. 正确查看FormData内容

FormData对象直接用console.log打印会显示为空对象,这是控制台的显示特性,并非真的没有数据。要查看实际内容,需遍历FormData:

// 替换原console.log(formData)
formData.forEach((value, key) => {
    console.log(`${key}: ${value}`);
});

3. 规范action函数参数写法(可选)

Remix的action函数标准写法是直接解构request参数,更清晰规范:

export async function action({ request }: { request: Request }) {
    // 原有逻辑代码
}

完成以上修改后,重新提交表单就能正常获取到表单数据了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 22:33:26