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

NextJS + Conform加载数据后下拉选择框无法填充问题

问题:Conform + Zod 表单下拉框无法自动填充初始值

在CSR组件中使用Conform和Zod构建编辑表单,从服务器加载初始数据后,名称字段能正确填充,但下拉选择框始终选中默认的“Seleccionar categoría”选项,无法自动匹配category.idPadre对应的父分类。已确认category数据加载完成且idPadre存在有效值,尝试过将id转为字符串、新增状态管理等方法均无效。

解决方案

问题核心是Conform表单初始化时机与数据加载时机不匹配,且手动设置defaultValue会干扰Conform的状态管理。以下是修复步骤:

1. 让Conform监听数据变化自动重新初始化表单

在useForm配置中添加reinitialize选项,监听category的变化,当数据加载完成后自动更新表单默认值:

const [form, fields] = useForm({
    lastResult,
    defaultValue: {
        id: category?.id,
        nombre: category?.nombre,
        idPadre: category?.idPadre ? category.idPadre.toString() : "",
    },
    onValidate({ formData }) {
        return parseWithZod(formData, {
            schema: updateCategorySchema,
        })
    },
    shouldValidate: "onBlur",
    shouldRevalidate: "onInput",
    // 当category数据更新时重新初始化表单
    reinitialize: category,
})

2. 移除手动设置的defaultValue,使用Conform字段属性绑定

Conform会自动管理表单字段的状态,无需手动设置defaultValue,直接展开fields对应的属性即可:

修改名称输入框

<Input
    className="mt-1"
    {...fields.nombre} // 展开Conform提供的字段属性(name、value等)
    id="nombre"
    placeholder="Ingrese el nombre"
/>

修改下拉选择框

<select
    className="mt-1 block w-full rounded-md border border-gray-300 p-2 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm"
    {...fields.idPadre} // 展开Conform字段属性,自动绑定正确的value
    id="idPadre"
    disabled={categories.length <= 1}
>
    <option value="">
        {categories.length > 1 ? "Seleccionar categoría" : "No hay categorías"}
    </option>
    {categories
        .filter(cat => cat.id !== category.id)
        .map((cat) => (
            <option key={cat.id} value={cat.id.toString()}>
                {cat.nombre}
            </option>
        ))}
</select>

原因说明

  • 初始渲染时category为null,useForm的defaultValue中idPadre为空字符串;当数据加载完成后,useForm默认不会重新初始化,导致表单状态仍保持初始空值。
  • 手动设置defaultValue会与Conform的内部状态管理冲突,必须通过Conform提供的字段属性来绑定表单控件,确保状态统一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:35:14