-
Notifications
You must be signed in to change notification settings - Fork 20
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Form Research #1329
Comments
Стандартный селект не может работать в форме. Чтобы сделать uncontrolled Select, нужно добавить его нативную версию. Таргет будет выглядеть также, но выпадающий список уже будет нативный. И такой селект уже будет работать в формах. |
Тогда в первую очередь делать 2 вариант, с разработкой компонента form. А к хуку подключать по возможности |
Пример использования:
В зависимости от типа FormItem система будет прокидывать onChange и другие нужные свойства в children, также можно будет написать свой обработчик при необходимости, прокинув функцию в FormItem |
Можешь подробнее описать, как будет определяться тип для FormItem. Пока не совсем понятно, как вычленить нужный onChange. И конечные пропсы нужно будет складывать в FromItem или же в его children (Button/TextField)? |
опиши пожалуйста пример с колбэками. Не сильно хочется использовать дженерики в компонентах, т.к. мы наружу страемся теперь не поставлять типы, и пользователям каждый раз нужно будет самим их собирать |
|
Для компонента Form явно нужен дизайн, просто для поддержки useForm нужно поменять компоненты или написать какие-то адаптеры к давайте второе сделаем сейчас а первое сделаем попозже ? |
Если будем указывать
зачем тогда Input как children пробрасывать? |
У части компонентов внутри не хватает обработчика onInput, тут на него бы еще внимание обратил. В том же TextField, onChange не сразу вызывается. И если от формы требуется моментальная реакция на изменения, то придется компоненты некоторые допилить |
@iljs А есть схема как события тогда должны работать и обрабатываться? |
На текущий момент поддержка есть у следующих компонентов: TextField, Checkbox, Switch, RadioGroup / RadioGroup Пример:
В компоненте TextArea не корректно работает ref на 120 строке. Если убрать условия, то компонент совместим Для Select, Combobox и Slider требуется обертка, вот пример:
После этого можно использовать вот так:
PR: #1421 |
Думаю надо попробовать реализовать Select и Combobox без обертки. |
а этот пример показывает, что мы должны будем эти компоненты сделать и отдать пользователям или просто как пример и такие надстройки должны будут сами разработчики делать? или ждём, когда эту поддержку @shuga2704 добавит? |
@neretin-trike , мы должны сделать |
Еще бы добавил возможность прокидывание пропсов формы без обертки FormItem, аля через |
Пример использования при изменения компонента:
Пример использования с хуком:
Пример использования с оберткой: Решение похоже на верхнее, но более просто в обслуживании из-за своей простоты.
С использованием Controller ( работает без правок ) :
|
Form Research
Есть 2 основных предложения реализации:
1. Для поддержки хука useForm, каждый компонент должен поддерживать параметры:
Важно предусмотреть типы, который возвращаются при onChange. Например текущий select ( https://plasma.sberdevices.ru/web/components/select/ ) возвращает просто value. В свою очередь для работы с формой надо возвращать тип, который есть в обычном нативном select из html ( https://react.dev/reference/react-dom/components/select ) в MUI сделано именно так ( https://mui.com/material-ui/api/select/ )
Анализ разработанных компонентов и примеры
Пример работает на актуальном WEB, под надстройкой подразумевается то, что компонент неспособен работать без передаваемого value и самостоятельно он работать не может
Пример: https://codesandbox.io/p/devbox/react-hook-form-research-forked-64n5ly ( Preview 5173 )
2. Сделать компонент Form по аналогии с AntDesign
Пример: https://ant.design/components/form
Данный способ более прост в реализации. По сути есть 2 компонента Form который объеденяет все поля и компонент FormItem, который является оберткой. В эту обертку мы сможем запихнуть функционал, который позволит работать Select, Calender, Slider, Combobox, которые требуют обязательный параметр value.
Я думаю наилучшим решением будет добавить специальный пропс, который смог бы передавать унифицированные данные в форму и компонент FormItem передавал бы его для получения данных. Например onChangeForForm.
Также сможем в будущем добавить стилизацию для формы
По итогу я предлагаю:
The text was updated successfully, but these errors were encountered: