如何使用 React Hook Form Controller 实现 ReactFlagsSelect

How To implement ReactFlagsSelect with React Hook Form Controller

我尝试使用 <Controller /> 通过 React Hook 实现。当我提交表单国家字段 return undefined.

<Controller 
  name="country"
  control={control}
  render={({ field: { onChange, value } }) => (
    <ReactFlagsSelect
      selected={selected}
      onSelect={code => handleChange(code)}
      value={value}
      onChange={onChange}
    />
  )}
/>

问题是您将 RHF 的 onChange 处理程序传递给了错误的道具。 <ReactFlagsSelect /> 没有 onChange 属性,您应该将其传递给 onSelect 属性。

<Controller 
  name="country"
  control={control}
  render={({ field: { onChange, value } }) => (
    <ReactFlagsSelect
      selected={selected}
      onSelect={onChange}
      value={value}
    />
  )}
/>

Side-note:RHF 将在其内部表单状态中更新您注册字段的值更改,因此无需通过 useState 或类似方式对这些值使用额外的状态管理。如果您确实需要调用您的 handleChange 回调,您可以在 onSelect 回调中执行这两项操作。

<Controller 
  name="country"
  control={control}
  render={({ field: { onChange, value } }) => (
    <ReactFlagsSelect
      selected={selected}
      onSelect={code => {
        onChange(code);
        handleChange(code);
      }}
      value={value}
    />
  )}
/>