我想生成一个表单,该表单可用于管理以数字形式存储在数据库中的选项。
但是,如果我现在将数据库中的项输入到钩子中:
const form = useForm({.
initialValues: {
option: 1
},
});
这是否与Select组件不兼容,因为它只在内部处理字符串。因此,在这种情况下,没有选择正确的值:
<Select
label="Option"
{...form.getInputProps("option")}
/>
现在我怎样才能优雅地解决这个问题呢?有没有API/选项可以解决这个问题,或者我真的需要手动将每个数值转换成字符串,使其与Mantine兼容?
多谢了。
3条答案
按热度按时间watbbzwu1#
下面的代码应该是不言自明的。如果不是,请阅读@mantine/form包文档。
brgchamk2#
我使用这个代码:
zmeyuzjn3#
我相信您可以通过转换“value”的类型来解决这个问题。
这是未记录的,并且可能会在将来的版本中中断,但您可以执行以下操作:
我假设在
Select
内部最终发生的是一些相等性检查,这些检查将通过数字和字符串,因此在呈现时选择正确的项,在提交时输出正确的值。我个人在
zodResolver
中使用这个方法,zodResolver
会强烈抱怨在它期望数字的地方提供字符串,我不愿意为了处理这个问题而使我的zod
模式更加复杂。公平地说,我很欣赏Mantine采取只支持字符串的方法,因为原生HTML
<select />
元素总是会给予您字符串,而打开其他任何东西的大门可能是一项大量的工作。尽管如此,似乎只是提供数字值,并保持
as any
(或者如果您不喜欢整个简洁的事情,您可以使用as unknown as string
)的类型脚本是一种享受-至少现在是这样!