Middle
Компонентҳои мураккаб + React Context → интиқоли formEntity тавассути провайдер дар Form ва истифода дар FormItem. Form фарз мекунад, ки фарзандони худро дар FormContext.Provider мепӯшад, ва FormItem аз cloneElement истифода мебарад, то ки арзиш ва onChange-ро ба Input ворид кунад. Таврӣ: боварӣ ҳосил кунед, ки FormItem номи онро ба ҳалли навсозӣ мефиристад. ```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
Ҷавоб аз 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 обновление состояния формы будет некорректным, так как не будет понятно, какое поле изменилось.
Такой подход позволяет централизованно управлять состоянием формы и упрощает работу с вложенными компонентами формы.