இந்தக் கட்டுரை SurveyJS ஆல் ஸ்பான்சர் செய்யப்பட்டது பெரும்பாலான ரியாக்ட் டெவலப்பர்கள் சத்தமாக விவாதிக்காமல் பகிர்ந்து கொள்ளும் மன மாதிரி உள்ளது. அந்த வடிவங்கள் எப்போதும் கூறுகளாக இருக்க வேண்டும். இது போன்ற ஒரு அடுக்கைக் குறிக்கிறது:
உள்ளூர் மாநிலத்திற்கான ரியாக்ட் ஹூக் படிவம் (குறைந்தபட்ச மறு-ரெண்டர்கள், பணிச்சூழலியல் புல பதிவு, கட்டாய தொடர்பு). சரிபார்ப்புக்கான Zod (உள்ளீடு சரியானது, எல்லை சரிபார்ப்பு, வகை-பாதுகாப்பான பாகுபடுத்தல்). பின்தளத்திற்கான ரியாக்ட் வினவல்: சமர்ப்பித்தல், மறுமுயற்சிகள், கேச்சிங், சர்வர் ஒத்திசைவு மற்றும் பல.
மற்றும் பெரும்பாலான படிவங்களுக்கு - உங்கள் உள்நுழைவுத் திரைகள், உங்கள் அமைப்புகள் பக்கங்கள், உங்கள் CRUD மாதிரிகள் - இது நன்றாக வேலை செய்கிறது. ஒவ்வொரு பகுதியும் அதன் வேலையைச் செய்கிறது, அவை சுத்தமாக உருவாக்கப்படுகின்றன, மேலும் உங்கள் தயாரிப்பை வேறுபடுத்தும் உங்கள் பயன்பாட்டின் பகுதிகளுக்கு நீங்கள் செல்லலாம். ஆனால் ஒவ்வொரு முறையும், ஒரு படிவம் முந்தைய பதில்களைச் சார்ந்து இருக்கும் தெரிவுநிலை விதிகள் அல்லது மூன்று புலங்களில் அடுக்கி வைக்கப்படும் பெறப்பட்ட மதிப்புகள் போன்ற விஷயங்களைக் குவிக்கத் தொடங்குகிறது. முழு பக்கங்களும் தவிர்க்கப்பட வேண்டும் அல்லது இயங்கும் மொத்தத்தின் அடிப்படையில் காட்டப்பட வேண்டும். யூஸ்வாட்ச் மற்றும் இன்லைன் கிளை மூலம் முதல் நிபந்தனையை நீங்கள் கையாளுகிறீர்கள், இது நன்றாக இருக்கிறது. பிறகு மற்றொன்று. உங்கள் Zod ஸ்கீமாவால் இயல்பான முறையில் வெளிப்படுத்த முடியாத குறுக்கு-புல விதிகளை குறியாக்க சூப்பர் ரீஃபைனை அணுகுகிறீர்கள். பின்னர், படி வழிசெலுத்தல் வணிக தர்க்கத்தை கசியத் தொடங்குகிறது. ஒரு கட்டத்தில், நீங்கள் உருவாக்கியதைப் பார்த்து, படிவம் உண்மையில் UI அல்ல என்பதை உணருங்கள். இது ஒரு முடிவெடுக்கும் செயல்முறையாகும், மேலும் கூறு மரமானது நீங்கள் அதைச் சேமித்து வைத்திருக்கும் இடமாகும். இங்குதான் ரியாக்டில் உள்ள வடிவங்களுக்கான மன மாதிரி உடைகிறது என்று நான் நினைக்கிறேன், அது உண்மையில் யாருடைய தவறும் இல்லை. RHF + Zod ஸ்டாக் எதற்காக வடிவமைக்கப்பட்டது என்பதில் சிறப்பாக உள்ளது. சிக்கல் என்னவென்றால், அதன் சுருக்கங்கள் சிக்கலுடன் பொருந்தக்கூடிய புள்ளியைக் கடந்தும் அதை நாங்கள் தொடர்ந்து பயன்படுத்த முனைகிறோம், ஏனெனில் மாற்றீட்டிற்கு வடிவங்களைப் பற்றி முற்றிலும் வேறுபட்ட சிந்தனை தேவைப்படுகிறது. இந்தக் கட்டுரை அந்த மாற்றைப் பற்றியது. இதைக் காட்ட, ஒரே மாதிரியான பல-படி படிவத்தை இரண்டு முறை உருவாக்குவோம்:
ரியாக்ட் ஹூக் படிவம் + சோட் மூலம் சமர்ப்பிப்பதற்காக வினவலுக்கு பதிலளிக்க, SurveyJS உடன், ஒரு படிவத்தை தரவுகளாகக் கருதுகிறது - ஒரு எளிய JSON ஸ்கீமா - ஒரு கூறு மரத்தை விட.
அதே தேவைகள், அதே நிபந்தனை தர்க்கம், முடிவில் அதே API அழைப்பு. அதன் பிறகு, என்ன நகர்த்தப்பட்டது, எது தங்கியது என்பதை நாங்கள் துல்லியமாக வரைபடமாக்குவோம், மேலும் நீங்கள் எந்த மாதிரியைப் பயன்படுத்த வேண்டும், எப்போது பயன்படுத்த வேண்டும் என்பதைத் தீர்மானிக்க ஒரு நடைமுறை வழியை அமைப்போம். நாங்கள் உருவாக்கும் படிவம்:
இந்தப் படிவம் 4-படி ஓட்டத்தைப் பயன்படுத்தும்: படி 1: விவரங்கள்
முதல் பெயர் (தேவை), மின்னஞ்சல் (தேவை, சரியான வடிவம்).
படி 2: ஆர்டர்
அலகு விலை, அளவு, வரி விகிதம், பெறப்பட்டது: கூட்டுத்தொகை, வரி, மொத்தம்.
படி 3: கணக்கு மற்றும் கருத்து
உங்களிடம் கணக்கு உள்ளதா? (ஆம்/இல்லை) ஆம் என்றால் → பயனர்பெயர் + கடவுச்சொல் இரண்டும் தேவை. இல்லை என்றால் → மின்னஞ்சல் ஏற்கனவே படி 1 இல் சேகரிக்கப்பட்டுள்ளது.
திருப்தி மதிப்பீடு (1–5) ≥ 4 → “உங்களுக்கு என்ன பிடித்தது?” என்று கேட்டால் ≤ 2 → கேட்டால் “நாம் எதை மேம்படுத்தலாம்?”
படி 4: மதிப்பாய்வு
மொத்தம் >= 100 இருந்தால் மட்டுமே தோன்றும் இறுதி சமர்ப்பிப்பு.
இது தீவிரமானது அல்ல. ஆனால் கட்டிடக்கலை வேறுபாடுகளை அம்பலப்படுத்த இது போதுமானது. பகுதி 1: கூறு-உந்துதல் (ரியாக்ட் ஹூக் படிவம் + ஜோட்) நிறுவல் npm react-hook-form zod @hookform/resolvers @tanstack/react-query நிறுவவும்
ஜோட் ஸ்கீமா Zod ஸ்கீமாவுடன் ஆரம்பிக்கலாம், ஏனென்றால் பொதுவாக அங்குதான் படிவத்தின் வடிவம் நிறுவப்படும். முதல் இரண்டு படிகளுக்கு - தனிப்பட்ட விவரங்கள் மற்றும் ஆர்டர் உள்ளீடுகள் - அனைத்தும் நேரடியானவை: தேவையான சரங்கள், குறைந்தபட்ச எண்கள் மற்றும் ஒரு எண். நீங்கள் நிபந்தனை விதிகளை வெளிப்படுத்த முயற்சிக்கும்போது சுவாரஸ்யமான பகுதி தொடங்குகிறது.
"zod" இலிருந்து {z } ஐ இறக்குமதி செய்;
export const formSchema = z.object({ firstName: z.string().min(1, "Required"), email: z.string().email("தவறான மின்னஞ்சல்"), விலை: z.number().min(0), அளவு: z.number().min(1), taxRate: z.ncumber: z.ncumber z.enum(["Yes", "No"]), பயனர்பெயர்: z.string().விரும்பினால்(), கடவுச்சொல்: z.string().விரும்பினால்(), திருப்தி: z.number().min(1).max(5), நேர்மறை கருத்து: z.string().supptional(), improvementalFeedback(). ctx) => {if (data.hasAccount === "Yes") {if (!data.username) {ctx.addIssue({குறியீடு: "தனிப்பயன்", பாதை: ["username"], செய்தி: "தேவை" }); {!data.password. "தனிப்பயன்", பாதை: ["கடவுச்சொல்"], செய்தி: "குறைந்தபட்சம் 6 எழுத்துகள்" });
என்றால் (data.satisfaction >= 4 && !data.positiveFeedback) {ctx.addIssue({குறியீடு: "தனிப்பயன்", பாதை: ["positiveFeedback"], செய்தி: "நீங்கள் விரும்பியதைப் பகிரவும்" }); }
என்றால் (data.satisfaction <= 2 && !data.improvementFeedback) { ctx.addIssue({ code: "custom", path:["மேம்படுத்தல் பின்னூட்டம்"], செய்தி: "எதை மேம்படுத்த வேண்டும் என்பதை எங்களிடம் கூறுங்கள்" }); }});
ஏற்றுமதி வகை FormData = z.infer
Zod இன் வகை-நிலை ஸ்கீமா பொருளின் வடிவத்தை விவரிக்கிறது, புலங்கள் முக்கியமானதாக இருக்கும் போது நிர்வகிக்கும் விதிகள் அல்ல, ஏனெனில் பயனர்பெயர் மற்றும் கடவுச்சொல் ஆகியவை நிபந்தனையுடன் தேவைப்பட்டாலும் விருப்பத்தேர்வாக() தட்டச்சு செய்யப்படுகின்றன என்பதைக் கவனியுங்கள். நிபந்தனைத் தேவை சூப்பர் ரீஃபைனுக்குள் வாழ வேண்டும், இது வடிவம் சரிபார்க்கப்பட்ட பிறகு இயங்குகிறது மற்றும் முழு பொருளையும் அணுகும். அந்தப் பிரிதல் ஒரு குறை அல்ல; இந்தக் கருவி எதற்காக வடிவமைக்கப்பட்டுள்ளது: சூப்பர் ரீஃபைன் என்பது ஸ்கீமா கட்டமைப்பிலேயே வெளிப்படுத்த முடியாதபோது குறுக்கு-புலம் தர்க்கம் செல்லும். இங்கே குறிப்பிடத்தக்கது என்னவென்றால், இந்த திட்டம் வெளிப்படுத்தவில்லை. இதில் பக்கங்கள் பற்றிய கருத்து இல்லை, எந்த புள்ளியில் எந்த புலங்கள் தெரியும் என்ற கருத்து இல்லை, வழிசெலுத்தல் பற்றிய கருத்து இல்லை. அதெல்லாம் வேற எங்காவது வாழணும். படிவம் கூறு
"react-hook-form" இலிருந்து {useForm, useWatch}ஐ இறக்குமதி செய்க; "@hookform/resolvers/zod" இலிருந்து {zodResolver }ஐ இறக்குமதி செய்
const STEPS = ["விவரங்கள்", "ஆர்டர்", "கணக்கு", "மதிப்பாய்வு"];
வகை OrderPayload = FormData & { துணை மொத்தம்: எண்; வரி: எண்; மொத்தம்: எண்};
ஏற்றுமதி செயல்பாடு RHFMultiStepForm() {const [step, setStep] = useState(0);
மாறுதல் பிறழ்வு = உபயோகமாற்றம்({ mutationFn: async (பேலோடு: OrderPayload) => { const res = காத்திருங்கள் பெற ("/api/orders", { முறை: "POST", தலைப்புகள்: { "உள்ளடக்க வகை": "application/json" }, உடல்: JSON.stringify(payload), }); (!res.ok) புதிய பிழையை எறிந்தால் ("சமர்ப்பிப்பதில் தோல்வி"); திரும்ப res.json(); }, });
const {பதிவு, கட்டுப்பாடு, கையாளுதல், படிவநிலை: {பிழைகள்}, } = useForm
திரும்ப (
);}Pen SurveyJS-03-RHF [forked] by sixthextinction ஐப் பார்க்கவும். இங்கே நிறைய நடக்கிறது, மேலும் விஷயங்கள் எங்கு முடிந்தது என்பதைக் கவனிக்க மெதுவாக்குவது மதிப்பு.
பெறப்பட்ட மதிப்புகள் - துணைத்தொகை, வரி, மொத்தம் - யூஸ்வாட்ச் மற்றும் யூஸ்மெமோ மூலம் கூறுகளில் கணக்கிடப்படுகின்றன, ஏனெனில் அவை நேரடி புல மதிப்புகளைச் சார்ந்தது மற்றும் அவற்றிற்கு வேறு இயற்கையான இடம் இல்லை. பயனர்பெயர், கடவுச்சொல், நேர்மறை பின்னூட்டம் மற்றும் மேம்பாட்டிற்கான தெரிவுநிலை விதிகள் JSX இல் இன்லைன் நிபந்தனைகளாக உள்ளன. ஸ்டெப்-ஸ்கிப்பிங் லாஜிக் - மதிப்பாய்வுப் பக்கம் மொத்தம் >= 100 ஆக இருந்தால் மட்டுமே தோன்றும் - ஷோசமர்ப்பிப்பு மாறி மற்றும் படி 3 இல் உள்ள ரெண்டர் நிபந்தனையில் உட்பொதிக்கப்பட்டிருக்கும். வழிசெலுத்தல் என்பது ஒரு யூஸ்ஸ்டேட் கவுண்டர் ஆகும், அதை நாங்கள் கைமுறையாக அதிகரிக்கிறோம். மறுமுயற்சிகள், தேக்ககப்படுத்துதல் மற்றும் செல்லாததாக்குதல் ஆகியவற்றை எதிர்வினை வினவல் கையாளுகிறது. படிவம் சரிபார்க்கப்பட்ட தரவுகளுடன் mutation.mutate என்று அழைக்கிறது.
இதில் எதுவுமே தவறில்லை. இது இன்னும் இடியோமடிக் ரியாக்ட், மேலும் RHF தனிமைப்படுத்தப்பட்ட மறு-ரெண்டர்களுக்கு இந்த கூறு மிகவும் சிறப்பாக செயல்படுகிறது. ஆனால் நீங்கள் இதை எழுதாத ஒருவரிடம் ஒப்படைத்து, மறுஆய்வுப் பக்கம் எந்த நிபந்தனைகளின் கீழ் தோன்றும் என்பதை விளக்கச் சொன்னால், அவர்கள் ஒரே வரியில் கூறப்பட்ட விதியை மறுகட்டமைக்க ஷோசமர்ப்பணம், படி 3 ரெண்டர் நிபந்தனை மற்றும் nav பட்டன் லாஜிக் - மூன்று தனித்தனி இடங்கள் மூலம் கண்டறிய வேண்டும். படிவம் செயல்படுகிறது, ஆம், ஆனால் நடத்தை ஒரு அமைப்பாக உண்மையில் ஆய்வு செய்ய முடியாது. அதை மனதளவில் செயல்படுத்த வேண்டும். மிக முக்கியமாக, அதை மாற்றுவதற்கு பொறியியல் ஈடுபாடு தேவை. மறுஆய்வுப் படி காண்பிக்கப்படும்போது சரிசெய்தல் போன்ற சிறிய மாற்றங்கள் கூட, கூறுகளைத் திருத்துதல், சரிபார்ப்பைப் புதுப்பித்தல், இழுக்கும் கோரிக்கையைத் திறப்பது, மதிப்பாய்வுக்காகக் காத்திருத்தல் மற்றும் மீண்டும் பயன்படுத்துதல். பகுதி 2: ஸ்கீமா-டிரைவன் (சர்வேஜேஎஸ்) இப்போது ஒரு திட்டத்தைப் பயன்படுத்தி அதே ஓட்டத்தை உருவாக்குவோம். நிறுவல் npm இன்ஸ்டால் சர்வே-கோர் சர்வே-ரியாக்ட்-யுஐ @tanstack/react-query
சர்வே-கோர் எம்ஐடி-உரிமம் பெற்ற இயங்குதளம்-சுயாதீனமான இயக்க நேர இயந்திரம் சர்வேஜேஎஸ்-ன் படிவ ரெண்டரிங்கைச் செயல்படுத்துகிறது. இது ஒரு JSON ஸ்கீமாவை எடுத்து, அதிலிருந்து ஒரு உள் மாதிரியை உருவாக்குகிறது மற்றும் உங்கள் எதிர்வினை கூறுகளில் இருக்கும் அனைத்தையும் கையாளுகிறது: தெரிவுநிலை வெளிப்பாடுகளை மதிப்பீடு செய்தல், பெறப்பட்ட மதிப்புகளைக் கணக்கிடுதல், பக்க நிலையை நிர்வகித்தல், சரிபார்ப்பைக் கண்காணித்தல் மற்றும் எந்தப் பக்கங்கள் உண்மையில் காட்டப்படுகின்றன என்பதைத் தீர்மானித்தல். சர்வே-ரியாக்ட்-யுஐயுஐ / ரெண்டரிங் லேயர் அந்த மாதிரியை ரியாக்டுடன் இணைக்கிறது. இது அடிப்படையில் ஒரு <சர்வே மாடல்={மாடல்} /> கூறு ஆகும், இது எஞ்சினின் நிலை மாறும் போதெல்லாம் மறு-ரெண்டர் ஆகும். SurveyJS UI நூலகங்கள் கோண, Vue3 மற்றும் பல கட்டமைப்புகளுக்கும் கிடைக்கின்றன.
ஒன்றாக, அவை உங்களுக்கு ஒரு முழுமையான செயல்பாட்டு, பல-பக்க படிவ இயக்க நேரத்தை வழங்குகின்றன. திட்ட வடிவமே, முன்பு கூறியது போல், ஒரு JSON மட்டுமே - DSL அல்லது தனியுரிமை எதுவும் இல்லை. நீங்கள் அதை இன்லைன் செய்யலாம், கோப்பிலிருந்து இறக்குமதி செய்யலாம், API இலிருந்து பெறலாம் அல்லது தரவுத்தள நெடுவரிசையில் சேமித்து, இயக்க நேரத்தில் ஹைட்ரேட் செய்யலாம். அதே படிவம், தரவு இதோ அதே வடிவம், இந்த முறை JSON பொருளாக வெளிப்படுத்தப்பட்டது. ஸ்கீமா அனைத்தையும் வரையறுக்கிறது: கட்டமைப்பு, சரிபார்ப்பு, தெரிவுநிலை விதிகள், பெறப்பட்ட கணக்கீடுகள், பக்க வழிசெலுத்தல் - மற்றும் அதை இயக்க நேரத்தில் மதிப்பிடும் ஒரு மாதிரிக்கு ஒப்படைக்கிறது. இது முழுவதுமாகத் தெரிகிறது:
ஏற்றுமதி const surveySchema = {தலைப்பு: "ஆர்டர் ஃப்ளோ", showProgressBar: "மேல்", பக்கங்கள்: [ {name: "details", உறுப்புகள்: [ { type: "text", name: "firstName", isRequired: true }, {type: "text", name: "email", inputType:"email: "email "மின்னஞ்சல்", உரை: "தவறான மின்னஞ்சல்" }] } ] }, {பெயர்: "ஆர்டர்", உறுப்புகள்: [ {வகை: "உரை", பெயர்: "விலை", உள்ளீட்டு வகை: "எண்", இயல்புநிலை மதிப்பு: 0 }, {வகை: "உரை", பெயர்: "அளவு", உள்ளீட்டு வகை, வகை: 1: "எண்" "கீழே இறங்கு",பெயர்: "taxRate", defaultValue: 0.1, விருப்பத்தேர்வுகள்: [ {மதிப்பு: 0.05, உரை: "5%" }, {மதிப்பு: 0.1, உரை: "10%" }, {மதிப்பு: 0.15, உரை: "15%" } ] }, {வகை: "வெளிப்பாடு", பிரைஸ் பெயர்: }, { வகை: "வெளிப்பாடு", பெயர்: "வரி", வெளிப்பாடு: "{subtotal} {taxRate}" }, {வகை: "வெளிப்பாடு", பெயர்: "மொத்தம்", வெளிப்பாடு: "{subtotal} + {tax}" } ] }, {பெயர்: "கணக்கு", உறுப்புகள்: [ {வகை, பெயர், "ஒய்" தேர்வு: "ரேடியோகுரூப்" "இல்லை"] }, {வகை: "உரை", பெயர்: "பயனர்பெயர்", காணக்கூடியதாக இருந்தால்: "{hasAccount} = 'ஆம்'", தேவை: உண்மை }, {வகை: "உரை", பெயர்: "கடவுச்சொல்", உள்ளீடு வகை: "கடவுச்சொல்", காணக்கூடியதாக இருந்தால்: "{hasAccount}, "உரை: "சரியானது: வகை: குறைந்தபட்ச நீளம்: 6, உரை: "குறைந்தபட்சம் 6 எழுத்துக்கள்" }] }, {வகை: "மதிப்பீடு", பெயர்: "திருப்தி", விகிதம்Min: 1, விகிதம்மேக்ஸ்: 5 }, {வகை: "கருத்து", பெயர்: "நேர்மறை கருத்து", காணக்கூடியதாக இருந்தால்: "{திருப்தி}, >= 4 வகை பெயர்: " "improvementFeedback", காணக்கூடியதாக இருந்தால்: "{திருப்தி} <= 2" } ] }, {பெயர்: "விமர்சனம்", தெரியும் என்றால்: "{மொத்தம்} >= 100", உறுப்புகள்: [] } ]};
இதை ஒரு கணம் RHF பதிப்போடு ஒப்பிடவும்.
நிபந்தனையுடன் பயனர்பெயர் மற்றும் கடவுச்சொல் தேவைப்படும் சூப்பர் ரீஃபைன் பிளாக் போய்விட்டது. காணக்கூடியதாக இருந்தால்: "{hasAccount} = 'ஆம்'" உடன் இணைந்து தேவை: உண்மை இரண்டு கவலைகளையும் ஒன்றாகக் கையாளும், களத்திலேயே, நீங்கள் அவற்றைக் கண்டறியலாம். யூஸ்வாட்ச் + யூஸ்மெமோ சங்கிலியானது துணைத்தொகை, வரி மற்றும் மொத்தம் ஆகியவற்றைக் கணக்கிடும் மூன்று வெளிப்பாடு புலங்களால் மாற்றப்பட்டது, அவை ஒன்றையொன்று பெயரால் குறிப்பிடுகின்றன. மறுஆய்வுப் பக்கத்தின் நிபந்தனை, RHF பதிப்பில், ஷோ சமர்ப்பித்தல், படி 3 ரெண்டர் கிளை மூலம் மட்டுமே மறுகட்டமைக்க முடியும். இறுதியாக, nav பொத்தான் லாஜிக் என்பது பக்கப் பொருளில் உள்ள சொத்து என்றால் தெரியும்.
அங்கேயும் அதே லாஜிக்தான். இந்த திட்டமானது, கூறு முழுவதும் பரவாமல், தனிமையில் தெரியும் இடத்தில் வாழ ஒரு இடத்தை வழங்குகிறது. மேலும், ஸ்கீமா வகையைப் பயன்படுத்துகிறது: துணைத்தொகை, வரி மற்றும் மொத்தத்திற்கான 'வெளிப்பாடு'. வெளிப்பாடு படிக்க மட்டுமே மற்றும் கணக்கிடப்பட்ட மதிப்புகளைக் காட்ட முக்கியமாகப் பயன்படுத்தப்படுகிறது. SurveyJS வகையையும் ஆதரிக்கிறது: நிலையான உள்ளடக்கத்திற்கான 'html', ஆனால் கணக்கிடப்பட்ட மதிப்புகளுக்கு, வெளிப்பாடு சரியான தேர்வாகும். இப்போது எதிர்வினை பக்கத்திற்கு. வழங்குதல் மற்றும் சமர்ப்பித்தல் மிகவும் எளிமையானது. உங்கள் API க்கு அதே வழியில் வயர் onComplete - யூஸ்மியூடேஷன் அல்லது ப்ளைன் ஃபெட்ச் மூலம்:
"react" இலிருந்து {useState, useEffect, useRef} ஐ இறக்குமதி செய்க;
ஏற்றுமதி செயல்பாடு SurveyForm() {const [model] = useState(() => new Model(surveySchema));
மாறுதல் பிறழ்வு = உபயோகமாற்றம்({ mutationFn: async (தரவு) => { const res = காத்திருங்கள் பெற ("/api/orders", { முறை: "POST", தலைப்புகள்: { "உள்ளடக்க வகை": "application/json" }, உடல்: JSON.stringify(data), }); (!res.ok) புதிய பிழையை எறிந்தால் ("சமர்ப்பிப்பதில் தோல்வி"); திரும்ப res.json(); }, });
const mutationRef = useRef(mutation); mutationRef.current = பிறழ்வு; useEffect(() => {const handler = (sender) => mutationRef.current.mutate(sender.data); model.onComplete.add(handler); return () => model.onComplete.remove(handler);}, [model]); // ரெண்டர் ஒவ்வொரு ரெண்டரையும் மீண்டும் ஹேண்ட்லரைப் பதிவு செய்வதைத் தவிர்க்கிறது (பிறழ்வு பொருள் அடையாள மாற்றங்கள்)
திரும்ப (
<>
Pen SurveyJS-03-SurveyJS [forked by sixthextinction] பார்க்கவும்.
onComplete பயனர் கடைசியாக காணக்கூடிய பக்கத்தின் முடிவை அடையும் போது எரிகிறது. ஆகவே, மொத்தம் 100ஐத் தாண்டவில்லை மற்றும் மறுஆய்வுப் பக்கம் தவிர்க்கப்பட்டால், அது இன்னும் சரியாகச் செயல்படும், ஏனெனில் “கடைசிப் பக்கம்” என்றால் என்ன என்பதைத் தீர்மானிப்பதற்கு முன் சர்வேஜேஎஸ் தெரிவுநிலையை மதிப்பிடுகிறது. பின்னர், sender.data அனைத்து பதில்களையும் கணக்கிடப்பட்ட மதிப்புகளுடன் (துணைமொத்தம், வரி, மொத்தம்) முதல்-வகுப்பு புலங்களாகக் கொண்டிருக்கும், எனவே API பேலோட் ஆனது onSubmit இல் கைமுறையாக RHF பதிப்பில் அசெம்பிள் செய்யப்பட்டதைப் போலவே இருக்கும். திmutationRef வடிவமானது, ஒவ்வொரு ரெண்டரிலும் மாறக்கூடிய மதிப்பின் மீது நிலையான நிகழ்வு ஹேண்ட்லர் தேவைப்படும் எந்த இடத்துக்கும் நீங்கள் சென்றடைவீர்கள் - சர்வேஜேஎஸ்-குறிப்பிட்ட எதுவும் இல்லை.
எதிர்வினை கூறு இனி எந்த வணிக தர்க்கத்தையும் கொண்டிருக்காது. யூஸ்வாட்ச் இல்லை, நிபந்தனைக்குட்பட்ட ஜேஎஸ்எக்ஸ் இல்லை, ஸ்டெப் கவுண்டர் இல்லை, யூஸ்மெமோ செயின் இல்லை, சூப்பர் ரீஃபைன் இல்லை. ரியாக்ட் என்பது உண்மையில் சிறந்ததைச் செய்கிறது: ஒரு கூறுகளை வழங்குதல் மற்றும் அதை API அழைப்பிற்கு வயரிங் செய்தல். எதிர்வினையிலிருந்து வெளியேறியது எது?
கவலை RHF அடுக்கு சர்வேஜேஎஸ் தெரிவுநிலை JSX கிளைகள் தெரியும் என்றால் பெறப்பட்ட மதிப்புகள் யூஸ்வாட்ச் / யூஸ்மெமோ வெளிப்பாடு குறுக்கு புல விதிகள் சூப்பர் ரீஃபைன் திட்ட நிபந்தனைகள் வழிசெலுத்தல் படி நிலை என்றால் பக்கம் தெரியும் ஆட்சி இடம் கோப்புகள் முழுவதும் விநியோகிக்கப்பட்டது திட்டத்தில் மையப்படுத்தப்பட்டது
ரியாக்டில் இருப்பது தளவமைப்பு, ஸ்டைலிங், சமர்ப்பிப்பு வயரிங் மற்றும் பயன்பாட்டு ஒருங்கிணைப்பு ஆகும், அதாவது ரியாக்ட் உண்மையில் வடிவமைக்கப்பட்டது. மற்ற அனைத்தும் ஸ்கீமாவிற்குள் நகர்த்தப்பட்டது, மேலும் ஸ்கீமா ஒரு JSON பொருளாக இருப்பதால், அதை தரவுத்தளத்தில் சேமிக்கலாம், உங்கள் பயன்பாட்டுக் குறியீட்டிலிருந்து சுயாதீனமாக பதிப்பு செய்யலாம் அல்லது வரிசைப்படுத்தல் தேவையில்லாமல் உள் கருவி மூலம் திருத்தலாம். மதிப்பாய்வுப் பக்கத்தைத் தூண்டும் வரம்பை மாற்ற வேண்டிய தயாரிப்பு நிர்வாகி, கூறுகளைத் தொடாமல் அதைச் செய்யலாம். வடிவ நடத்தை அடிக்கடி உருவாகும் மற்றும் எப்போதும் பொறியாளர்களால் இயக்கப்படாத குழுக்களுக்கு இது ஒரு அர்த்தமுள்ள செயல்பாட்டு வேறுபாடு. ஒவ்வொரு அணுகுமுறையையும் எப்போது பயன்படுத்த வேண்டும்? எனக்கு வேலை செய்யும் ஒரு நல்ல கட்டைவிரல் விதி இங்கே உள்ளது: படிவத்தை முழுவதுமாக நீக்குவதை கற்பனை செய்து பாருங்கள். நீங்கள் எதை இழப்பீர்கள்?
இது திரைகள் என்றால், நீங்கள் கூறு-உந்துதல் படிவங்கள் வேண்டும். இது வணிக தர்க்கமாக இருந்தால், வரம்புகள், கிளை விதிகள் மற்றும் உண்மையான முடிவுகளை குறியாக்கம் செய்யும் நிபந்தனை தேவைகள் போன்றவை, உங்களுக்கு ஸ்கீமா இன்ஜின் தேவை.
இதேபோல், உங்கள் வழியில் வரும் மாற்றங்கள் பெரும்பாலும் லேபிள்கள், புலங்கள் மற்றும் தளவமைப்பைப் பற்றியதாக இருந்தால், RHF உங்களுக்கு நன்றாகச் சேவை செய்யும். செவ்வாய்க்கிழமை பிற்பகலில் டிக்கெட்டை தாக்கல் செய்யாமல் உங்கள் ops அல்லது சட்டக் குழு சரிசெய்ய வேண்டிய நிபந்தனைகள், முடிவுகள் மற்றும் விதிகளைப் பற்றியது என்றால், SurveyJS உடனான ஸ்கீமா மாதிரி மிகவும் நேர்மையான பொருத்தமாக இருக்கும். இந்த இரண்டு அணுகுமுறைகளும் உண்மையில் ஒன்றுக்கொன்று போட்டியாக இல்லை. அவை பல்வேறு வகையான சிக்கல்களைத் தீர்க்கின்றன, மேலும் தவிர்க்க வேண்டிய தவறு என்னவென்றால், தர்க்கத்தின் எடைக்கு சுருக்கம் பொருந்தாமல் இருப்பது - ஒரு விதி அமைப்பை ஒரு கூறு போல நடத்துவது, ஏனெனில் அது பழக்கமான கருவி, அல்லது ஒரு படிவம் மூன்று படிகள் வரை வளர்ந்து நிபந்தனை புலத்தைப் பெற்றதால் கொள்கை இயந்திரத்தை அடைவது. நாம் இங்கு கட்டியெழுப்பப்பட்ட வடிவம், வேண்டுமென்றே எல்லைக்கு அருகில் அமர்ந்து, வித்தியாசத்தை வெளிப்படுத்தும் அளவுக்கு சிக்கலானது, ஆனால் ஒப்பீடு மோசடியாக உணரும் அளவுக்கு அதிகமாக இல்லை. உங்கள் கோட்பேஸில் கையாலாகாத பெரும்பாலான உண்மையான வடிவங்கள் அதே எல்லைக்கு அருகில் அமர்ந்திருக்கலாம், மேலும் அவை உண்மையில் என்னவென்று யாரேனும் பெயரிட்டார்களா என்பதுதான் பொதுவாக கேள்வி. ரியாக்ட் ஹூக் படிவம் + Zod ஐப் பயன்படுத்தும்போது:
படிவங்கள் CRUD-சார்ந்தவை; தர்க்கம் ஆழமற்றது மற்றும் UI-உந்துதல்; பொறியாளர்கள் அனைத்து நடத்தைகளையும் சொந்தமாக வைத்திருக்கிறார்கள்; பின்தளம் உண்மையின் ஆதாரமாக உள்ளது.
எப்போது SurveyJS ஐப் பயன்படுத்தவும்:
படிவங்கள் வணிக முடிவுகளை குறியாக்கம் செய்கின்றன; விதிகள் UI இல் இருந்து சுயாதீனமாக உருவாகின்றன; தர்க்கம் காணக்கூடியதாகவோ, தணிக்கை செய்யக்கூடியதாகவோ அல்லது பதிப்பாகவோ இருக்க வேண்டும்; பொறியாளர்கள் அல்லாதவர்கள் நடத்தையை பாதிக்கின்றனர்; ஒரே படிவம் பல முனைகளில் இயங்க வேண்டும்.