हो लेख SurveyJS हांणी प्रायोजीत केल्लो आसा चडशे React विकसक केन्नाच मोट्यान चर्चा करिनासतना वांटून घेतात अशें मानसीक मॉडेल आसा. रूपां सदांच घटक आसूंक जाय अशें मानतात. हाचो अर्थ असो स्टॅक असो जाता:
थळाव्या स्थिती खातीर रिएक्ट हुक फॉर्म (उण्यांत उणें रि-रेंडर, एर्गोनॉमिक क्षेत्र नोंदणी, अत्यावश्यक परस्पर संवाद). प्रमाणीकरणाखातीर Zod (इनपुट योग्यताय, शिमो प्रमाणीकरण, प्रकार-सुरक्षीत विश्लेशण). बॅकएंडा खातीर प्रतिक्रिया क्वेरी: सबमिशन, परतून यत्न, कॅशिंग, सर्वर समक्रमण, आनी हेर.
आनी भोवतेक फॉर्मां खातीर — तुमचीं लॉगीन स्क्रीन, तुमचीं सेटिंग्ज पानां, तुमच्या CRUD मोडलां खातीर — हें खरेंच बरें काम करता. दरेक तुकडो आपलें काम करता, ते निवळ रचतात, आनी तुमी तुमच्या ऍप्लिकेशनाच्या भागांचेर वचूंक शकतात जे प्रत्यक्षांत तुमच्या उत्पादनांत फरक करतात. पूण दर एक फावट, एक फॉर्म आदल्या जापांचेर आदारून आशिल्ले दृश्यताय नेम, वा तीन क्षेत्रांतल्यान झरपी व्युत्पन्न मोलां सारकिल्ल्यो गजाली एकठांय करपाक लागता. घडये पुराय पानां लेगीत जीं वगडावचीं वा चलपी एकूणाचेर आदारीत दाखोवचीं. तुमी पयलें सशर्त useWatch आनी इनलायन शाखे वरवीं हाताळटात, जें बरें आसा. मागीर दुसरो. मागीर तुमी superRefine कडेन पावतात क्रॉस-फील्ड नेम एन्कोड करपाक जे तुमची Zod येवजण सामान्य रितीन व्यक्त करूंक शकना. मागीर, स्टेप नेव्हिगेशन वेवसायीक तर्क लीक जावपाक लागता. कांय वेळार, तुमी कितें बांदलां तें पळयतात आनी आतां फॉर्म खरेंच UI ना हें कळटा. तो चडसो निर्णय प्रक्रिया, आनी घटक झाड फकत तुमी संयोगान तें सांठोवपाचें सुवातेर आसा. हांगाच म्हाका दिसता रिएक्टांतल्या फॉर्मां खातीर मानसीक मॉडेल मोडटा, आनी खरेंच कोणाचीच चूक ना. RHF + Zod स्टॅक ज्या खातीर तयार केल्लो तातूंत उत्कृश्ट आसा. मुद्दो म्हळ्यार ताचीं अमूर्तताय समस्याक जुळटा त्या बिंदू वयल्यान आमी ताचो वापर करत रावपाची प्रवृत्ती आसता कारण पर्याया खातीर पुरायपणान रुपां विशीं वेगळी विचार करपाची गरज आसता. हो लेख त्या पर्याया विशीं आसा. हें दाखोवपाक, आमी दोन फावटीं सारकोच मल्टी-स्टेप फॉर्म तयार करतले:
सादर करपा खातीर रिएक्ट हुक फॉर्म + ज़ोड रिएक्ट क्वेरीक तार केल्लो आशिल्ल्यान, SurveyJS कडेन, जो फॉर्माक डेटा म्हणून मानता — सादी JSON येवजण — घटक झाडा परस.
समान गरजां, समान सशर्त तर्क, निमाणें समान एपीआय कॉल. मागीर आमी कितें हाललें आनी कितें उरलें तें सारकें नकाशे तयार करतले, आनी तुमी खंयचें मॉडेल वापरचें, आनी केन्ना वापरचें तें थारावपाचो वेव्हारीक मार्ग मांडटले. आमी बांदतात तो फॉर्म:
हो फॉर्म 4 पांवड्याचो प्रवाह वापरतलो: पांवडो 1: तपशील
पयलें नांव (आवश्यक), २. ईमेल (गरजेचें, वैध स्वरूप).
पांवडो 2: ऑर्डर दिवप
एकक किंमत, . प्रमाण, २. कर दर, ८. व्युत्पन्न: १. उपकुल, 1999. कर, ८. एकूण.
पांवडो 3: खातें & प्रतिसाद
तुमचें खातें आसा? (होय/ना) . हो → वापरप्याचें नांव + पासवर्ड जाल्यार, दोनूय गरजेचे. जर ना → ईमेल पयलींच पांवडो 1 त एकठांय केल्लो.
समाधान रेटिंग (1-5) 1.1. जर ≥ 4 → विचारात “तुका कितें आवडलें?” जर ≤ 2 → विचारात “आमी कितें सुदारूं येता?”
पांवडो 4: पुनरावलोकन करप
फकत एकूण >= 100 आसल्यारच दिसता निमाणें सादरीकरण.
हें चडांत चड न्हय. पूण वास्तुशिल्पांतले फरक उक्ते करपाक पुरो. भाग 1: घटक-संचालित (रिएक्ट हुक फॉर्म + ज़ोड) स्थापन करप npm react-hook-form zod @hookform/resolvers @tanstack/react-query प्रतिष्ठापीत करचें
ज़ोड येवजण सुरवात करूंया Zod येवजणे पासून, कारण चड करून थंयच फॉर्माचो आकार स्थापन जाता. पयल्या दोन पांवड्यां खातीर — वैयक्तीक तपशील आनी ऑर्डर इनपुट — सगळें सरळ आसा: गरजेच्यो स्ट्रिंग्स, किमान आशिल्ले क्रमांक, आनी एक enum. सशर्त नेम उक्तावपाचो यत्न करतना मनोरंजक भाग सुरू जाता.
"zod" कडल्यान { z } आयात करात;
निर्यात const formSchema = z.object ({ पयलें नांव: z.string ().min (1, "गरजेचें"), ईमेल: z.string ().email ("अवैध ईमेल"), किंमत: z.number ().min (0), प्रमाण: z.number ().min (1), taxRate: z.number (), hasAccount: z.enum (["होय", "ना"]), वापरप्याचें नांव: z.string ().पर्यायी (), पासवर्ड: z.string (). पर्यायी (), समाधान: z.संख्या ().min (1). चडांत चड (5), सकारात्मकप्रतिसाद: z.string (). पर्यायी (), सुदारणाप्रतिसाद: z.string (). पर्यायी (),}).superRefine ((डेटा, ctx) => { if (data.hasAccount === "होय") { जर (! डेटा.वापरपी नांव) { ctx.addIssue ({ कोड: "सानुकूल", मार्ग: ["वापरप्याचें नांव"], संदेश: "गरज" }); } if (! डेटा.पासवर्ड || डेटा.पासवर्ड.लांबाय < 6) { ctx.addIssue({ कोड: "सानुकूल", मार्ग: ["पासवर्ड"], संदेश: "Min 6 अक्षरां" });
if (data.satisfaction >= 4 && !data.positiveFeedback) { ctx.addIssue({ कोड: "सानुकूल", मार्ग: ["सकारात्मक प्रतिसाद"], संदेश: "कृपा करून तुमकां आवडलें तें वांटचें" }); } .
if (डेटा.समाधान <= 2 && !डेटा.सुदारणाप्रतिसाद) { ctx.addIssue({ कोड: "सानुकूल", मार्ग:["improvementFeedback"], message: "कृपा करून आमकां कितें सुदारचें तें सांगात" }); }});
निर्यात प्रकार FormData = z.infer
वापरप्याचें नांव आनी पासवर्ड सशर्तपणान गरजेचे आसले तरी पर्यायी() म्हणून टायप केल्यात हें लक्षांत घेयात कारण Zod ची प्रकार-पातळेची येवजण वस्तूच्या आकाराचें वर्णन करता, क्षेत्रां केन्ना म्हत्वाचीं थारतात तें नियंत्रीत करपी नेम न्हय. सशर्त गरज superRefine भितर रावचें पडटा, जी आकार प्रमाणीत जाले उपरांत चलता आनी पुराय वस्तूक प्रवेश मेळटा. तें वेगळेपण हें एक दोश न्हय; it’s just what the tool is designed for: superRefine म्हणल्यार जेन्ना क्रॉस-फील्ड लॉजिक वता जेन्ना ती येवजण संरचनेंतच व्यक्त करूंक मेळना. हांगासरय उल्लेखनीय म्हणल्यार ही येवजण कितें व्यक्त करीना. तातूंत पानांची संकल्पना ना, खंयचीं क्षेत्रां खंयच्या बिंदूचेर दिसतात हाची संकल्पना ना आनी नेव्हिगेशनाची संकल्पना ना. तें सगळें खंय तरी जियेतलें. फॉर्म घटक
आयात { useForm, useWatch } from "react-hook-form";import { zodResolver } from "@hookform/resolvers/zod";import { useMutation } from "@tanstack/react-query";import { useState, useMemo } from "react";आयात { formSchema, type FormData } from "./schema";
const STEPS = ["तपशील", "ऑर्डर", "खातें", "पुनरावलोकन"];
प्रकार ऑर्डरपेलोड = फॉर्मडेटा & { उपएकूण: संख्या; कर: संख्या; एकूण: संख्या };
निर्यात फंक्शन RHFMultiStepForm () { const [पांवडो, setStep] = useState (0);
const उत्परिवर्तन = useMutation ({ mutationFn: async (पेलोड: ऑर्डरपेलोड) => { const res = वाट पळोवचें fetch ("/ api / आदेश", { पद्दत: "पोस्ट", headers: { "सामग्री-प्रकार": "ऍप्लिकेशन/json" }, शरीर: JSON.stringify (पेलोड), }); if (!res.ok) throw new Error("सबमिट करपाक अपेस आयलें"); res.json () परत करचें; }, ४. });
const { रजिस्टर, नियंत्रण, handleSubmit, formState: { त्रुटी }, } = useForm
return (
);}पळयात पेन सर्वेक्षणJS-03-RHF [forked] sixthextinction करून. हांगासर बरेंचशें घडटा, आनी गजाली खंय सोंपल्यो तें लक्षांत घेवपाक मंद करप फायद्याचें.
व्युत्पन्न मोलां — उपएकूण, कर, एकूण — useWatch आनी useMemo वरवीं घटकांत गणीत केल्यात कारण तीं लायव्ह क्षेत्र मोलाचेर आदारीत आसात आनी तांचे खातीर हेर सैमीक सुवात ना. वापरप्याचें नांव, पासवर्ड, positiveFeedback, आनी improvementFeedback खातीर दृश्यताय नेम JSX त इनलायन सशर्त म्हणून रावतात. स्टेप-स्किपिंग लॉजिक — फकत एकूण >= 100 आसतना दिसपी पुनरावलोकन पान — showSubmit चडांत चड आनी पांवडो 3 चेर रेंडर कंडीशनांत एम्बेड केल्लें आसा. नेव्हिगेशन स्वता फकत useState काउंटर आसा जो आमी हाताळणीन वाडयतात. React Query परतून यत्न, कॅशिंग, आनी अवैधताय हाताळटा. फॉर्म फकत प्रमाणीत डेटा वांगडा mutation.mutate कॉल करता.
हातूंतलें खंयचेंय चुकीचें ना, स्वताक. हें अजूनय मुहावरेचें रिएक्ट आसा, आनी आरएचएफ रि-रेंडर कशें वेगळें करता ताका लागून घटक सामकोच कार्यक्षम आसा. पूण जर तुमी हें बरयूंक नाशिल्ल्या कोणाकूय हातांत दिलें आनी तांकां पुनरावलोकन पान खंयच्या परिस्थितींत दिसता तें स्पश्ट करपाक सांगलें जाल्यार, तांकां showSubmit, स्टेप 3 रेंडर कंडीशन, आनी nav बटण लॉजिक — तीन वेगवेगळीं सुवाती — एका ओळींत सांगूं येतालो असो नेम परतून तयार करपाक ट्रेस करचो पडटलो. फॉर्म काम करता, हय, पूण वागणूक खरेंच एक वेवस्था म्हणून तपासपा सारकी ना. ताका मानसीक रितीन फांशी दिवची पडटा. ताचे परस चड म्हत्वाचें म्हणल्यार तो बदलपाक अभियांत्रिकीचो सहभाग जाय पडटा. ल्हान ट्वीक लेगीत, जशें पुनरावलोकन पावल दाखयता तेन्ना समायोजीत करप, म्हणल्यार घटक संपादीत करप, प्रमाणीकरण अद्ययावत करप, पुल विनंती उगडप, पुनरावलोकनाची वाट पळोवप आनी परतून उपयोजीत करप. भाग 2: येवजण-आदारीत (सर्वक्षणजेएस) 1.1. आतां येवजण वापरून तोच प्रवाह तयार करूंया. स्थापन करप npm सर्वेक्षण-कोर सर्वेक्षण-प्रतिक्रिया-ui @tanstack/react-query प्रतिष्ठापीत करचें
survey-coreMIT-परवानो आशिल्लें प्लॅटफॉर्म-स्वतंत्र रनटायम इंजिन जें SurveyJS च्या फॉर्म रेंडरींगाक शक्त दिता — हांगा आमी काळजी घेतात तो भाग. तो JSON येवजण घेता, तातूंतल्यान अंतर्गत मॉडेल तयार करता, आनी हेर तरेन तुमच्या React घटकांत जियेवपी सगळें हाताळटा: दृश्यताय अभिव्यक्तीचें मुल्यांकन करप, व्युत्पन्न मोलांची गणना करप, पान स्थिती वेवस्थापन करप, प्रमाणीकरणाचो मागोवप, आनी खंयचीं पानां प्रत्यक्षांत दाखयल्लीं दिल्यार “पूर्ण” म्हणल्यार कितें तें थारावप.
survey-react-uiत्या मॉडेलाक React कडेन जोडपी UI / रेंडरींग थर. तो मुळाव्यान
एकठांय, ते तुमकां नियंत्रण प्रवाहाची एकूच ओळ बरोवनासतना पुरायपणान कार्यक्षम, बहु-पान फॉर्म रनटायम दितात. येवजण स्वरूप स्वता, आदीं सांगिल्ले प्रमाण, फकत JSON आसा — DSL वा मालकीचें खंयचेंय ना. तुमी ती इनलायन करूंक शकतात, फायलीन आयात करूंक शकतात, एपीआय कडल्यान हाडूंक शकतात वा डेटाबेस स्तंभांत सांठोवंक शकतात आनी रनटायमा वेळार हायड्रेट करूंक शकतात. द सेम फॉर्म, अॅज डेटा हांगाय तेंच फॉर्म आसा, हे खेपे JSON वस्तू म्हणून व्यक्त केलां. येवजण सगळें व्याख्या करता: संरचना, प्रमाणीकरण, दृश्यताय नेम, व्युत्पन्न गणना, पान नेव्हिगेशन — आनी रनटायमा वेळार ताचें मुल्यांकन करपी मॉडेलाक दिता. तें पुरायपणान कशें दिसता तें पळयात:
export const surveySchema = { title: "क्रम प्रवाह", showProgressBar: "वयर", पान: [ { नांव: "तपशील", घटक: [ { प्रकार: "मजकूर", नांव: "पयलें नांव", isRequired: true }, { प्रकार: "मजकूर", नांव: "ईमेल", inputType: "ईमेल", isRequired: true, validators: [{ type: "email", text: "अवैध ईमेल" }] } ] }, { नांव: "क्रम", घटक: [ { प्रकार: "मजकूर", नांव: "किंमत", inputType: "संख्या", मुलभूत मोल: 0 }, { प्रकार: "मजकूर", नांव: "प्रमाण", inputType: "संख्या", मुलभूत मोल: 1 }, { प्रकार: "ड्रॉपडावन",नांव: "taxRate", defaultValue: 0.1, निवड: [ { मोल: 0.05, मजकूर: "5%" }, { मोल: 0.1, मजकूर: "10%" }, { मोल: 0.15, मजकूर: "15%" } ] }, { प्रकार: "अभिव्यक्ती", नांव: "उपएकूण", अभिव्यक्ती: "{किंमत} {प्रमाण}" }, { प्रकार: "अभिव्यक्ती", नांव: "कर", अभिव्यक्ती: "{उपएकूण} {करदर}" }, { प्रकार: "अभिव्यक्ती", नांव: "एकूण", अभिव्यक्ती: "{उपसमुच्चय} + {कर}" } ] }, { नांव: "खातें", घटक: [ { प्रकार: "रेडियोसमूह", नांव: "hasAccount", निवड: ["होय", "ना"] }, { प्रकार: "मजकूर", नांव: "वापरप्याचें नांव", visibleIf: "{hasAccount} = 'होय'", isRequired: true }, { प्रकार: "मजकूर", नांव: "पासवर्ड", inputType: "पासवर्ड", visibleIf: "{hasAccount} = 'होय'", isRequired: true, validators: [{ type: "text", minLength: 6, text: "Min 6 characters" } ] }, { प्रकार: "रेटिंग", नांव: "समाधान", rateMin: 1, rateMax: 5 }, { प्रकार: "टिप्पणी", नाव: "सकारात्मकप्रतिसाद", visibleIf: "{समाधान} >= 4" }, { प्रकार: "टिप्पणी", नांव: "सुदारणाप्रतिसाद", visibleIf: "{समाधान} <= 2" } ] }, { नांव: "पुनरावलोकन", visibleIf: "{एकूण} >= 100", घटक: [] } ]};
एक खिणा खातीर हाची तुळा आरएचएफ आवृत्ती कडेन करात.
सशर्त वापरप्याचें नांव आनी पासवर्ड जाय आशिल्लो superRefine ब्लॉक गेला. visibleIf: "{hasAccount} = 'होय'" isRequired कडेन जोडला: true दोनूय काळजी एकठांय हाताळटा, स्वताच्या मळार, जंय तुमी ते सोदपाची अपेक्षा करतले. उपसमुह, कर, आनी एकूण मेजपी useWatch + useMemo साखळीची सुवात तीन अभिव्यक्ती क्षेत्रांनी घेतल्या जीं एकामेकांक नांवान संदर्भ दितात. पुनरावलोकन पान स्थिती, जी RHF आवृत्तींत फकत showSubmit वरवीं ट्रेस करून पुनर्रचना करपाक मेळटाली, पांवडो 3 रेंडर शाखा. आनी निमाणें, nav बटण तर्क हो पान वस्तूचेर एकूच visibleIf गुणधर्म आसा.
तोच तर्क आसा. फकत येवजण ताका घटकांत पातळचे परस, एकांतांत दिसता थंय रावपाची सुवात दिता. तशेंच, येवजणेंत उप-एकूण, कर, आनी एकूण खातीर प्रकार वापरता: 'अभिव्यक्ती' हें लक्षांत दवरात. अभिव्यक्ती फकत वाचपाखातीर आसता आनी मुखेलपणान गणीत केल्लीं मोलां दाखोवपाखातीर वापरतात. SurveyJS स्थिर सामुग्री खातीर: 'html' प्रकाराकय तेंको दिता, पूण गणीत केल्ल्या मोला खातीर, अभिव्यक्ती ही योग्य पर्याय आसा. आतां रिएक्ट बाजू खातीर. रेंडरींग आनी सबमिशन खूप सादें. तुमच्या API कडेन तशेंच तार onComplete करात — useMutation वा सादें हाडपा वरवीं:
import { useState, useEffect, useRef } from "react";import { useMutation } from "@tanstack/react-query";import { Model } from "survey-core";import { सर्वेक्षण } from "सर्वक्षण-प्रतिक्रिया-ui";आयात "सर्वक्षण-कोर/सर्वक्षण-कोर.css";
निर्यात फंक्शन सर्वेक्षणफॉर्म () { const [मॉडेल] = useState (() => नवें मॉडेल (सर्वक्षण येवजण));
const उत्परिवर्तन = useMutation ({ उत्परिवर्तनFn: async (डेटा) => { const res = वाट पळोवचें fetch ("/ api / आदेश", { पद्दत: "पोस्ट", headers: { "सामग्री-प्रकार": "ऍप्लिकेशन/json" }, शरीर: JSON.stringify (डेटा), }); if (!res.ok) throw new Error("सबमिट करपाक अपेस आयलें"); res.json () परत करचें; }, ४. });
const mutationRef = useRef (उत्परिवर्तन); mutationRef.current = उत्परिवर्तन; useEffect (() => { const हॅन्डलर = (प्रेषक) => उत्परिवर्तनRef.current.mutate (प्रेषक.डेटा); मॉडेल.onComplete.add (हॅंडलर); return () => मॉडेल.onComplete.remove (हॅंडलर); }, [मॉडेल]); // ref दर रेंडराक हॅन्डलर परतून नोंद करप टाळटा (उत्परिवर्तन वस्तू वळख बदलता)
return ( <> <सर्वक्षण मॉडेल={मॉडेल} /> {उत्परिवर्तन.isError &&
पळयात पेन सर्वेक्षणJS-03-सर्वेक्षणJS [forked] sixthextinction कडल्यान.
वापरपी निमाण्या दिसपी पानाच्या शेवटाक पावतकच onComplete उजो लायता. देखून एकूण केन्नाच 100 पार करीना आनी पुनरावलोकन पान वगळ्ळें जाल्यार, तें अजूनय योग्य रितीन फायर करता कारण SurveyJS “निमाणें पान” म्हणल्यार कितें तें थारावचे पयलीं दृश्यतायेचें मुल्यांकन करता. मागीर, sender.data गणीत केल्ल्या मोलां वांगडा सगळ्यो जापो (उपएकूण, कर, एकूण) पयल्या वर्गाचे क्षेत्र म्हणून आसतात, देखून API पेलोड RHF आवृत्तीन onSubmit त हाताळणीन एकठांय केल्ल्या सारकोच आसा. दीmutationRef पॅटर्न होच तोच आसा जो तुमी खंयच्याय सुवातेर पावतले, दर एका रेंडराचेर बदलपी मोलाचेर स्थिर इव्हेंट हॅन्डलर जाय — ताचे विशीं SurveyJS-विशिश्ट कांयच ना.
React घटकांत आतां कसलोच वेवसायीक तर्क बिल्कुल ना. useWatch ना, सशर्त JSX ना, स्टेप काउंटर ना, useMemo साखळी ना, superRefine ना. React प्रत्यक्षांत जें बरें आसा तें करता: घटक रेंडर करप आनी ताका API कॉलाक वायरींग करप. रिएक्टांतल्यान कितें भायर सरलें?
हुस्को करप आरएचएफ स्टॅक सर्वेक्षणजेएस दृश्टीकोन जेएसएक्स फांटे visibleIf व्युत्पन्न मोलां useWatch / मेमो वापरात अभिव्यक्ती करप क्रॉस-फील्ड नेम सुपररिफायन करचें येवजणेच्यो अटी नेव्हिगेशन करप पावलाची स्थिती पान दृश्यमानIf नियम स्थान फायलींनी वितरीत केल्लें येवजणेंत केंद्रीकृत केल्लें
React त कितें रावता तें म्हणल्यार मांडावळ, स्टायलिंग, सबमिशन वायरींग, आनी अॅप एकठांय करप, म्हणल्यार React प्रत्यक्षांत ज्या गजालीं खातीर तयार केल्ली आसा. हेर सगळें येवजणेंत हालयलें, आनी येवजण फकत JSON वस्तू आशिल्ल्यान, ती डेटाबेसांत सांठोवंक मेळटा, तुमच्या ऍप्लिकेशन कोडांतल्यान स्वतंत्रपणान आवृत्ती करूं येता, वा उपयोजनाची गरज नासतना अंतर्गत साधनां वरवीं संपादीत करूं येता. पुनरावलोकन पान सुरू करपी कूंड बदलपाची गरज आशिल्ल्या उत्पादन वेवस्थापकाक घटकाक स्पर्श करिनासतना तें करूंक शकता. जंय फॉर्म वागणूक वारंवार विकसीत जाता आनी सदांच अभियंत्यांनी चालना दिवंक नाशिल्ल्या पंगडां खातीर तो अर्थपूर्ण कार्यकारी फरक. दरेक पद्दत केन्ना वापरचो? हांगा एक बरो नेम आसा जो म्हजे खातीर काम करता: फॉर्म पुरायपणान काडून उडोवपाची कल्पना करात. कितें गमावपाचें?
जर तें पडदे आसत जाल्यार, तुमकां घटक-आदारीत फॉर्म जाय. जर तो वेवसायीक तर्क आसत जाल्यार, जशें थ्रेशोल्ड, शाखा नेम, आनी सशर्त गरजां जीं खऱ्या निर्णयांक एन्कोड करतात, तुमकां येवजण इंजिन जाय.
तेच प्रमाण तुमच्या वाटेर येवपी बदल चड करून लेबलां, क्षेत्रां, आनी मांडावळी विशीं आसल्यार, RHF तुमकां बरी सेवा दितलो. जर ते अटी, परिणाम आनी नेम हांचे विशीं आसत जाल्यार तुमच्या ऑप्स वा कायदेशीर पंगडाक तिकीट दाखल करिनासतना मंगळारा दनपारां समायोजीत करपाची गरज आसूं येता, जाल्यार SurveyJS कडेन आशिल्लें येवजण मॉडेल चड प्रामाणीक फिट आसा. हे दोन पद्दती खरेंच एकामेकां कडेन सर्तींत नात. ते वेगवेगळ्या वर्गांतल्या समस्यांक संबोधीत करतात, आनी टाळपा सारकी चूक म्हळ्यार तर्कशास्त्राच्या वजनाक अमूर्तताय बेजोडप — तें वळखीचें साधन आशिल्ल्यान नेम प्रणालीक घटका सारकी वागप, वा एक फॉर्म तीन पांवड्या मेरेन वाडलो आनी सशर्त क्षेत्र मेळयलें म्हणून धोरण इंजिनाक पावप. आमी हांगा बांदिल्लें रूप मुद्दाम शिमे लागसार बसलां, फरक उक्तो करपा इतलें गुंतागुंतीचें पूण तुळा रिग जाल्ली दिसपा इतलें चड न्हय. तुमच्या कोडबेसांत अस्पश्ट जाल्ले चडशे खरे फॉर्म घडये त्याच शिमे लागसार बसतात, आनी प्रस्न चड करून फकत कोणेय ते प्रत्यक्षांत कितें आसात तें नांव दिलां काय ना असो आसता. रिएक्ट हुक फॉर्म + ज़ोड वापरात जेन्ना:
फॉर्म सीआरयूडी-प्रधान आसतात; तर्कशास्त्र उथळ आनी UI-आदारीत आसता; अभियंते सगळे वागणूक मालकीचे आसतात; बॅकएंड होच सत्याचो उगम उरता.
सर्वेक्षणजेएस वापरात जेन्ना:
फॉर्म वेवसायीक निर्णयांक एन्कोड करतात; नेम यूआय पासून स्वतंत्रपणान विकसीत जातात; तर्कशास्त्र दृश्यमान, ऑडिटेबल वा आवृत्ती केल्लो आसूंक जाय; बिगर अभियंते वागणुकेक प्रभाव घालतात; एकूच फॉर्म एका परस चड फ्रंटएंडांचेर चलपाक जाय.