Вам понадобится создать компонент, который объединяет и компонент `Select`, и компонент `Input`, и интегрировать его с библиотекой `react-hook-form`. Это может выглядеть следующим образом:
1. Убедитесь, что вы установили `react-hook-form`, если вы этого еще не сделали:
```bash
npm install react-hook-form
```
2. Затем создайте файл `email-input.tsx` и добавьте в него код для вашего компонента. Предположим, что вы хотите, чтобы пользователь мог выбирать домен из выпадающего списка и вводить локальную часть почтового адреса в текстовое поле.
Вот пример реализации:
```tsx
import React from 'react';
import { useForm, Controller } from 'react-hook-form';
interface EmailInputProps {
control: any; // Типизация для контроллера
}
const EmailInput: React.FC<EmailInputProps> = ({ control }) => {
return (
<div>
<Controller
name="localPart"
control={control}
defaultValue=""
render={({ field }) => (
<input
{...field}
placeholder="Введите локальную часть email"
style={{ marginRight: '8px' }}
/>
)}
/>
<Controller
name="domain"
control={control}
defaultValue=""
render={({ field }) => (
<select {...field}>
<option value="">Выберите домен</option>
<option value="gmail.com">gmail.com</option>
<option value="yahoo.com">yahoo.com</option>
<option value="hotmail.com">hotmail.com</option>
</select>
)}
/>
</div>
);
};
const FormComponent: React.FC = () => {
const { control, handleSubmit } = useForm({
defaultValues: {
localPart: '',
domain: ''
}
});
const onSubmit = (data: any) => {
alert(`Email: ${data.localPart}@${data.domain}`);
};
return (
<form onSubmit={handleSubmit(onSubmit)}>
<EmailInput control={control} />
<button type="submit">Отправить</button>
</form>
);
};
export default FormComponent;
```
### Объяснение кода:
1. **Импортируем необходимые библиотеки**: Мы импортируем `React`, `useForm` и `Controller` из `react-hook-form`.
2. **Создаем компонент EmailInput**: Этот компонент содержит два элемента управления:
- `input` для локальной части email.
- `select` для выбора домена email.
3. **Используем `Controller` для интеграции с react-hook-form**: `Controller` помогает связать состояние контролируемого компонента с библиотекой.
4. **Создаем основной компонент формы**: В этом компоненте мы используем хук `useForm` для создания управления формой, обрабатываем отправку данных и передаем `control` в компонент `EmailInput`.
5. **Обработка отправки формы**: При отправке формы мы собираем данные локальной части и выбранного домена и выводим их в виде alert.
Теперь вы можете использовать компонент `FormComponent` в вашем приложении, и при отправке формы получите полный email адрес, объединяющий оба введенных значения.