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