Sobes.tech
Middle

Samengestelde componenten + React Context → overdracht van formEntity via de provider in Form en gebruik in FormItem. Form omhult de kinderen met FormContext.Provider, en FormItem gebruikt cloneElement om value en onChange in Input te injecteren. Valstrik: zorg dat FormItem de naam doorgeeft aan de update-handler. ```javascript const Form = ({ children, formEntity }) => ( <FormContext.Provider value={formEntity}>{children}</FormContext.Provider> ); const FormItem = ({ name, children }) => { const { state, handlers } = useContext(FormContext); return React.cloneElement(children, { value: state[name], onChange: (e) => handlers.updateValues({ name, value: e.target.value }), }); }; ```

sobes.tech AI

Antwoord van AI

В данном примере используется паттерн Compound Components с React Context для управления состоянием формы.

  • Компонент Form создаёт контекст FormContext и передаёт в него объект formEntity, содержащий состояние формы и методы обновления.
  • FormItem получает из контекста состояние и обработчики, затем с помощью React.cloneElement инъецирует в дочерний элемент (например, <input>) пропсы value и onChange.

Ключевой момент — передача name в обработчик onChange, чтобы обновлять именно нужное поле формы:

onChange: (e) => handlers.updateValues({ name, value: e.target.value })

Без передачи name обновление состояния формы будет некорректным, так как не будет понятно, какое поле изменилось.

Такой подход позволяет централизованно управлять состоянием формы и упрощает работу с вложенными компонентами формы.