我正在使用基数ui原语Select,但我不知道如何将其与React Hook Form集成。我试着把寄存器放在Select.root标签中,但是没有用。
我还使用了样式化组件,所以所有的选择标签都像这样使用,<S.Something/>因为我已经全部导入为S
这是创建项目的函数:
const SelectItem = React.forwardRef(({ children, ...props } : any, forwardedRef) => {
return (
<S.Item {...props} ref={forwardedRef}>
<S.ItemText>{children}</S.ItemText>
<S.ItemIndicator>
<S.TriggerIcon src="/form/selector-icon.svg" />
</S.ItemIndicator>
</S.Item>
);
});
然后,我以这种方式创建Select:
<S.FormItem key={index}>
<S.Label htmlFor={index+''}>{question.question}</S.Label>
<S.Root {...register(`${questionName}`, { required: true })}>
<S.Trigger id={index+''}>
<S.Value/>
<S.Icon>
<S.TriggerIcon src="/form/selector-icon.svg" />
</S.Icon>
</S.Trigger>
<S.Portal>
<S.Content>
<S.SelectorUp>
Up
</S.SelectorUp>
<S.Viewport>
{question.options?.map((option, i) => {
return (
<SelectItem key={i} value={option}>
{option}
</SelectItem>
)
})}
</S.Viewport>
<S.SelectorDown>
Down
</S.SelectorDown>
</S.Content>
</S.Portal>
</S.Root>
</S.FormItem>
2条答案
按热度按时间4uqofj5v1#
我也遇到了同样的问题,但通过将field. onChangevalue传递给onValueChangeprop解决了这个问题。
我使用“react-hook-form”库中的Controller来 Package Radix Select。
以前我是这样的
添加onValueChange属性后
对于您的代码,我认为您必须用控制器 Package S.根,它看起来像这样。
57hvy0tb2#
我发现问题在于
Select.Root
组件没有将onChange
属性传递给select
HTML元素。为了解决这个问题,我在
onValueChange
prop中调用onChange
函数。仅仅将onChange
传递到onValueChange
对我来说不起作用,相反,我将输入的value
和name
作为普通对象传递: