بۇ ماقالە SurveyJS نىڭ قوللىشىغا ئېرىشكەن كۆپىنچە رېئاكتىپ ئاچقۇچىلار ئۇنى يۇقىرى ئاۋازدا مۇنازىرە قىلماي ئورتاقلىشىدىغان روھىي مودېل بار. بۇ شەكىللەر ھەمىشە زاپچاس بولۇشى كېرەك. بۇ دېگەندەك بىر توپنى كۆرسىتىدۇ:
يەرلىك ھالەتتىكى قارماق جەدۋىلىنى قايتۇرۇڭ (ئەڭ تۆۋەن قايتا كۆرسىتىش ، ئېروگونومىيىلىك مەيداننى تىزىملاش ، مەجبۇرىي ئۆز-ئارا تەسىر كۆرسىتىش). دەلىللەشنىڭ نومۇرى (كىرگۈزۈش توغرىلىقى ، چېگرانى دەلىللەش ، تىپنى بىخەتەر تەھلىل قىلىش). ئارقا سۇپىدىكى سوئالغا جاۋاب بېرىش: يوللاش ، قايتا تەكشۈرۈش ، غەملەك ، مۇلازىمېتىر ماسقەدەملەش قاتارلىقلار.
مۇتلەق كۆپ قىسىم جەدۋەللەرگە - كىرىش ئېكرانىڭىز ، تەڭشەك بېتىڭىز ، CRUD مودېللىرىڭىز ئۈچۈن بۇ ھەقىقەتەن ياخشى ئىشلەيدۇ. ھەر بىر ئەسەر ئۆز خىزمىتىنى قىلىدۇ ، ئۇلار پاكىز يازىدۇ ، قوللىنىشچان پروگراممىڭىزنىڭ مەھسۇلاتىڭىزنى پەرقلەندۈرىدىغان قىسمىغا يۆتكىسىڭىز بولىدۇ. ئەمما ھەر قېتىمدا بىر جەدۋەل ئىلگىرىكى جاۋابلارغا باغلىق بولغان كۆرۈنۈشلۈك قائىدىلەر ياكى ئۈچ ساھەدە كاساتلاشقان قىممەت قارىشى قاتارلىق نەرسىلەرنى توپلاشقا باشلايدۇ. بەلكىم ئىجرا قىلىنىدىغان ئومۇمىي سانغا ئاساسەن ئاتلاپ كېتىش ياكى كۆرسىتىشكە تېگىشلىك بارلىق بەتلەر بولۇشى مۇمكىن. سىز تۇنجى شەرتنى useWatch ۋە ئىچكى شاخ بىلەن بىر تەرەپ قىلىسىز ، بۇ ياخشى. ئاندىن يەنە بىرى. ئاندىن سىز Zod لايىھىڭىز نورمال ئۇسۇلدا ئىپادىلىيەلمەيدىغان ساھە ھالقىغان قائىدىلەرنى كودلاش ئۈچۈن superRefine غا يېتىسىز. ئاندىن ، قەدەم باسقۇچلىرى سودا لوگىكىسىنى ئاشكارىلاشقا باشلايدۇ. بەزى ۋاقىتتا ، ئۆزىڭىزنىڭ نېمە قۇرغانلىقىڭىزغا قاراپ ، جەدۋەلنىڭ ئەمدى UI ئەمەسلىكىنى ھېس قىلىسىز. بۇ تېخىمۇ كۆپ قارار چىقىرىش جەريانى ، زاپچاس دەرىخى دەل ئۇنى ساقلىغان جاي. بۇ مېنىڭچە رېئاللىقتىكى شەكىللەرنىڭ روھىي ئەندىزىسى بۇزۇلدى ، بۇ ھەقىقەتەن ھېچكىمنىڭ خاتالىقى ئەمەس. RHF + Zod تىزىمى لايىھەلەنگەن. مەسىلە شۇكى ، بىز ئۇنىڭ ئابستراكتلىرى مەسىلىگە ماس كېلىدىغان نۇقتىدىن ئۆتۈپ كېتىشنى داۋاملاشتۇرىمىز ، چۈنكى تاللاش شەكلى پۈتۈنلەي باشقىچە تەپەككۇر ئۇسۇلىنى تەلەپ قىلىدۇ. بۇ ماقالە شۇ تاللاش ھەققىدە. بۇنى كۆرسىتىش ئۈچۈن ، بىز ئوخشاش ئىككى باسقۇچلۇق جەدۋەلنى ئىككى قېتىم قۇرىمىز:
React Hook Form + Zod ئارقىلىق سۇئالغا جاۋاب قايتۇرۇش ئۈچۈن ، SurveyJS بىلەن بىر جەدۋەلنى سانلىق مەلۇمات دەپ قارايدۇ - ئاددىي JSON پىلانى - زاپچاس دەرىخى ئەمەس.
ئوخشاش تەلەپ ، ئوخشاش شەرتلىك لوگىكا ، ئاخىرىدا ئوخشاش API چاقىرىش. ئاندىن بىز نېمىنىڭ يۆتكىلىپ ، نېمىنىڭ قالغانلىقىنى ئېنىق خەرىتىمىز ، ھەمدە قايسى مودېلنى ئىشلىتىش كېرەكلىكىنى ، قاچان قارار قىلىدىغان ئەمەلىي ئۇسۇلنى ئوتتۇرىغا قويىمىز. بىز قۇرغان جەدۋەل:
بۇ جەدۋەلدە 4 باسقۇچلۇق ئېقىم ئىشلىتىلىدۇ: 1-قەدەم: تەپسىلاتلار
ئىسمى (تەلەپ قىلىنغان) ، ئېلېكترونلۇق خەت (تەلەپ قىلىنغان ، ئۈنۈملۈك فورماتى).
ئىككىنچى قەدەم: زاكاز
بىرلىك باھاسى ، Quantity, باج نىسبىتى ، مەنبە: Subtotal, باج ، ئومۇمىي.
3-قەدەم: ھېسابات ۋە تەكلىپ
ھېساباتىڭىز بارمۇ؟ (ھەئە / ياق) ئەگەر ھەئە → ئىشلەتكۈچى ئىسمى + پارول بولسا ، ھەر ئىككىسى تەلەپ قىلىنىدۇ. ئەگەر No → ئېلېكترونلۇق خەت 1-قەدەمدە توپلانغان بولسا.
رازى بولۇش دەرىجىسى (1-5) ئەگەر ≥ 4 → «نېمىنى ياقتۇردىڭىز؟» دەپ سوراڭ. ئەگەر ≤ 2 → «بىز نېمىنى ياخشىلىيالايمىز؟» دەپ سورىسا.
4-قەدەم: تەكشۈرۈش
پەقەت ئومۇمىي = = 100 بولسا ئاندىن كۆرۈنىدۇ ئاخىرقى تاپشۇرۇش.
بۇ ھەددىدىن ئاشمايدۇ. ئەمما بىناكارلىق پەرقىنى ئاشكارىلاش يېتەرلىك. 1-قىسىم: زاپچاس قوزغاتقۇچ (قارماق شەكلى + Zod) قاچىلاش npm install react-hook-form zod @ hookform / resolvers @ tanstack / react-query
Zod Schema ئىشنى Zod پىلانىدىن باشلايلى ، چۈنكى بۇ ئادەتتە جەدۋەلنىڭ شەكلى تىكلىنىدىغان جاي. ئالدىنقى ئىككى باسقۇچ - شەخسىي تەپسىلاتلار ۋە زاكاز كىرگۈزۈش - ھەممە نەرسە بىۋاسىتە: تەلەپ قىلىنغان تىزمىلار ، ئەڭ تۆۋەن سان ۋە سانلار. قىزىقارلىق قىسمى شەرتلىك قائىدىلەرنى ئىپادىلىمەكچى بولغاندا باشلىنىدۇ.
"zod" دىن {z import
export const formSchema = z.object ({firstName: z.string (). min (1, "تەلەپ") ، ئېلخەت: z.string (). ئېلخەت ("ئىناۋەتسىز ئېلخەت") ، باھاسى: z.number (). min (0) ، سان z.string (). ئىختىيارىي () ، پارول: z.string (). ئىختىيارى () ، رازى بولۇش: z.number (). min (1) .max (5) (! data.username) {ctx.addIssue ({كود: "ئىختىيارى" ، يول:
if (data.satisfaction> = 4 &&! data.positiveFeedback) {ctx.addIssue ({كود: "ئىختىيارى" ، يول: }
if (data.satisfaction <= 2 &&! data.improvementFeedback) {ctx.addIssue ({code: "custom", path:["improvementFeedback"] ، ئۇچۇر: "نېمىنى ياخشىلاشنى بىزگە ئېيتىپ بېرىڭ"}); }});
چىقىرىش تىپى FormData = z.infer
شۇنىڭغا دىققەت قىلىڭكى ، ئىشلەتكۈچى ئىسمى ۋە پارولى شەرتلىك تەلەپ قىلىنغان تەقدىردىمۇ ئىختىيارى () دەپ يېزىلىدۇ ، چۈنكى Zod نىڭ تىپىدىكى لايىھە ئوبيېكتنىڭ شەكلىنى تەسۋىرلەيدۇ ، مەيدان مۇھىم بولغاندا قائىدە ئەمەس. شەرتلىك تەلەپ superRefine نىڭ ئىچىدە ياشىشى كېرەك ، بۇ شەكىل تەستىقلانغاندىن كېيىن ئىجرا بولىدۇ ھەمدە تولۇق جىسىمغا ئېرىشەلەيدۇ. بۇ ئايرىلىش نۇقسان ئەمەس. ئۇ پەقەت قورال ئۈچۈن لايىھەلەنگەن نەرسە: superRefine بولسا لايىھە قۇرۇلمىسىنىڭ ئۆزىدە ئىپادىلىگىلى بولمىغاندا ، مەيدان ھالقىغان لوگىكا بارىدىغان جاي. بۇ يەردە كىشىنىڭ دىققىتىنى تارتىدىغىنى بۇ پىلاننىڭ ئىپادىلەنمىگەن يېرى. ئۇنىڭدا بەت ئۇقۇمى ، قايسى ساھەدە قايسى نۇقتىدا كۆرۈنەلەيدىغانلىقى ۋە يول باشلاش ئۇقۇمى يوق. بۇلارنىڭ ھەممىسى باشقا جايدا ياشايدۇ. شەكىل زاپچاسلىرى
ئىمپورت {useForm, useWatch} "react-hook-form"; import @ zodResolver} "@ hookform / resolvers / zod" دىن ئىمپورت {import @ useMutation} "@ tanstack / react-query"; import {useState, useMemo} "reaction";
const STEPS = ["تەپسىلاتلار" ، "زاكاز" ، "ھېسابات" ، "تەكشۈرۈش"];
type OrderPayload = FormData & {subtotal: number; باج: سان ئومۇمىي: سان};
چىقىرىش ئىقتىدارى RHFMultiStepForm () {const [step, setStep] = useState (0);
const mutation = useMutation ({ mutationFn: async (payload: OrderPayload) => { const res = ساقلاشنى ساقلاش ("/ api / زاكاز", { ئۇسۇلى: "POST", ماۋزۇلار: {"مەزمۇن تىپى": "application / json"}, body: JSON.stringify (payload), }); if (! res.ok) يېڭى خاتالىق تاشلىسا ("تاپشۇرۇش مەغلۇب بولدى"); return res.json (); }, });
const {تىزىملاش ، كونترول قىلىش ، بىر تەرەپ قىلىش يوللاش ، جەدۋەل ھالىتى: {خاتالىق} ،} = useForm
قايتىش.
{step === 1 && (<> 10%
{قەدەم === 2 && (<> <تاللاش {... تىزىملىتىڭ ("hasAccount")}> <تاللاش قىممىتى = "ھەئە"> ھەئە <تاللاش قىممىتى = "ياق"> ياق
{hasAccount === "ھەئە" && (<> <كىرگۈزۈش {... تىزىملىتىڭ ("ئىشلەتكۈچى ئىسمى")} placeholder = "ئىشلەتكۈچى ئىسمى" /> <كىرگۈزۈش {... تىزىملىتىڭ ("پارول")} placeholder = "پارول" /> >)}
{رازى> = 4 && ()}
{رازى بولۇش <= 2 && ()} >)}
{step === 3 && total> = 100 &&
قەلەم تەكشۈرۈش JS-03-RHF نى ئالمىشىش ئارقىلىق كۆرۈڭ. بۇ يەردە نۇرغۇن ئىشلار يۈز بېرىۋاتىدۇ ، ئىشلارنىڭ قەيەردە ئاخىرلاشقانلىقىغا دىققەت قىلىش ئاستا.
ھاسىل قىلىنغان قىممەت - تارماق ، باج ، ئومۇمىي - زاپچاستا useWatch ۋە useMemo ئارقىلىق ھېسابلىنىدۇ ، چۈنكى ئۇلار نەق مەيدان قىممىتىگە باغلىق ، ئۇلار ئۈچۈن باشقا تەبىئىي جاي يوق. ئىشلەتكۈچى ئىسمى ، پارول ، positiveFeedback ۋە ياخشىلاشنىڭ كۆرۈنۈش قائىدىسى JSX دا تور شەرتلىرى سۈپىتىدە ياشايدۇ. قەدەمدىن ئاتلاش لوگىكىسى - ئومۇمىي بەت = = 100 - showSubmit ئۆزگەرگۈچى مىقدارغا ۋە 3-قەدەمدىكى كۆرسىتىش شەرتىگە قىستۇرۇلغاندىلا ئاندىن كۆرۈنىدۇ. يول باشلاشنىڭ ئۆزى پەقەت قولدا كۆپەيتىۋاتقان useState ھېساباتى. قايتا تەكشۈرۈش ، قايتا ئىشلىتىش ، ئىناۋەتسىز قىلىش. بۇ جەدۋەل پەقەت mutation دەپ ئاتىلىدۇ. دەلىللەنگەن سانلىق مەلۇماتلار بىلەن ئۆزگەرتىش.
بۇلارنىڭ ھېچقايسىسى خاتا ئەمەس. بۇ يەنىلا ئۆزگىچە رېئاكسىيە ، RHF نىڭ قايتا-قايتا كۆرسىتىشىنى ئايرىۋەتكەنلىكى ئۈچۈن زاپچاس خېلى ئىقتىدارلىق. ئەگەر سىز بۇنى يازمىغان كىشىگە تاپشۇرۇپ بېرىپ ، ئۇلاردىن تەكشۈرۈش بېتىنىڭ قانداق شارائىتتا كۆرۈنىدىغانلىقىنى چۈشەندۈرۈشىنى تەلەپ قىلسىڭىز ، ئۇلار showSubmit ، 3-باسقۇچلۇق كۆرسىتىش شەرتى ۋە دېڭىز كۇنۇپكىسى لوگىكىسى - ئايرىم-ئايرىم ئۈچ جاي ئارقىلىق ئىز قوغلاپ ، بىر قۇردا بايان قىلىنغان قائىدىنى قايتا قۇرۇپ چىقىشى كېرەك. جەدۋەل ئىشلەيدۇ ، شۇنداق ، ئەمما ھەرىكەتنى سىستېما سۈپىتىدە تەكشۈرگىلى بولمايدۇ. ئۇ روھىي جەھەتتىن ئىجرا قىلىنىشى كېرەك. تېخىمۇ مۇھىمى ، ئۇنى ئۆزگەرتىش قۇرۇلۇشقا قاتنىشىشنى تەلەپ قىلىدۇ. ھەتتا كىچىككىنە ئۆزگەرتىشمۇ ، تەكشۈرۈش باسقۇچى كۆرۈنگەندە تەڭشەش دېگەندەك ، زاپچاسنى تەھرىرلەش ، دەلىللەشنى يېڭىلاش ، تارتىش تەلىپىنى ئېچىش ، تەكشۈرۈشنى ساقلاش ۋە قايتا ئورۇنلاشتۇرۇشنى كۆرسىتىدۇ. 2-قىسىم: Schema قوزغىتىلغان (SurveyJS) ئەمدى بىر لايىھە ئارقىلىق ئوخشاش ئېقىننى قۇرايلى. قاچىلاش npm تەكشۈرۈش-يادرولۇق تەكشۈرۈش-رېئاكتىپ- ui @ tanstack / react-query
تەكشۈرۈش-يادرولۇق MIT ئىجازەتنامىسىگە ئېرىشكەن سۇپا مۇستەقىل ئىجرا قىلىش ماتورى SurveyJS نىڭ شەكلىنى كۆرسىتىش ئىقتىدارىغا ئىگە - بىز بۇ يەردە كۆڭۈل بۆلىدىغان قىسىم. ئۇ JSON لايىھىسىنى قوللىنىدۇ ، ئۇنىڭدىن ئىچكى مودېل بەرپا قىلىدۇ ۋە سىزنىڭ رېئاكتىپ تەركىبلىرىڭىزدە ياشايدىغان بارلىق ئىشلارنى بىر تەرەپ قىلىدۇ: كۆرۈنۈشلۈك ئىپادىلەرنى باھالاش ، ھاسىل قىلىنغان قىممەتلەرنى ھېسابلاش ، بەت ھالىتىنى باشقۇرۇش ، دەلىللەشنى ئىز قوغلاش ۋە قايسى بەتلەرنىڭ ئەمەلىيەتتە كۆرسىتىلگەنلىكىنى كۆزدە تۇتۇپ ، «تولۇق» نىڭ مەنىسىنى قارار قىلىش. survey-react-ui بۇ مودېلنى رېئاكسىيەگە ئۇلايدىغان UI / كۆرسىتىش قەۋىتى. ئۇ ماھىيەتتە ماتورنىڭ ھالىتى ئۆزگەرگەندە قايتا-قايتا كۆرسىتىدىغان <تەكشۈرۈش مودېلى = {مودېل} /> زاپچاس. SurveyJS UI كۈتۈپخانىلىرى Angular, Vue3 ۋە باشقا نۇرغۇن رامكىلار ئۈچۈنمۇ بار.
ئۇلار بىرلىكتە سىزگە بىر يۈرۈش كونترول ئېقىمىنى يازماي تۇرۇپ ، تولۇق ئىقتىدارلىق ، كۆپ بەتلىك جەدۋەل ئىجرا ۋاقتىنى بېرىدۇ. بۇ لايىھەنىڭ ئۆزى ، ئىلگىرى دېيىلگەندەك ، پەقەت JSON - DSL ياكى ئىگىدارچىلىق قىلىدىغان نەرسە يوق. ئۇنى قىستۇرۇپ ، ھۆججەتتىن ئەكىرىسىز ، API دىن ئەكېلىپ قويسىڭىز ياكى ساندان ئىستونىدا ساقلىسىڭىز ھەمدە ئىجرا بولغاندا سۇ تولۇقلىسىڭىز بولىدۇ. ئوخشاش جەدۋەل ، سانلىق مەلۇمات سۈپىتىدە مانا بۇ ئوخشاش شەكىل ، بۇ قېتىم JSON ئوبيېكتى سۈپىتىدە ئىپادىلەندى. بۇ لايىھە ھەممە نەرسىنى ئېنىقلايدۇ: قۇرۇلما ، دەلىللەش ، كۆرۈنۈشچانلىقى قائىدىسى ، ھاسىل قىلىنغان ھېسابلاش ، بەت يول باشلاش - ۋە ئۇنى ئىجرا ۋاقتىدا باھالايدىغان مودېلغا تاپشۇرۇپ بېرىدۇ. بۇ يەردە تولۇق كۆرۈنىدىغان نەرسە بار:
export const surveySchema = {ماۋزۇ: "زاكاز ئېقىمى", showPresentBar: "ئۈستى" ، بەتلەر: [{name: "تەپسىلاتلار" ، ئېلېمېنتلار: {name: "order", ئېلمىنتلار:ئىسىم: "taxRate", defaultValue: 0.1 ، تاللاش: "expression", name: "total", expression: "{subtotal} + {tax}"}]}, {name: "account", ئېلمىنتلار: "پارول", inputType: "پارول", visibleIf: "{hasAccount} = 'ھەئە'", isRequired: true, validators: [{type: "text", minLength: 6, تېكىست: "Min 6 ھەرپ"} > = 4 "}, {type:" comment ", name:" improvementFeedback ", visibleIf:" {رازى} <= 2 "}]}, {name:" review ", visibleIf:" {total}> = 100 ", ئېلېمېنتلار:
بۇنى RHF نەشرىگە بىر ئاز سېلىشتۇرۇڭ.
ئىشلەتكۈچى ئىسمى ۋە پارولىنى شەرتلىك تەلەپ قىلىدىغان superRefine توپى يوقىتىلدى. كۆرۈنۈشتە: SubWotal ، باج ۋە ئومۇمىي ساننى ھېسابلىغان UseWatch + useMemo زەنجىرىنىڭ ئورنىنى بىر-بىرىگە قارىتىدىغان ئۈچ ئىپادىلەش مەيدانى ئالماشتۇردى. تەكشۈرۈش بېتى شەرتى ، RHF نەشىرىدە پەقەت ShowSubmit ئارقىلىق ئىز قوغلاش ئارقىلىق قايتا قۇرغىلى بولىدۇ. ئاخىرىدا ، nav كۇنۇپكىسى لوگىكىسى بەت ئوبيېكتىدىكى يەككە كۆرۈنگەن خاسلىق.
ئوخشاش لوگىكا بار. ئۇ پەقەت بۇ پىلاننىڭ زاپچاسلارغا تارقالغاندىن كۆرە ، ئۇنى يەككە ھالەتتە كۆرۈنىدىغان جاي بىلەن تەمىنلىگەنلىكىدۇر. شۇنىڭغا دىققەت قىلىڭكى ، بۇ لايىھەدە تارماق ، باج ۋە ئومۇمىي سان ئۈچۈن «ئىپادىلەش» ئىشلىتىلىدۇ. ئىپادىلەش پەقەت ئوقۇشقىلا بولىدىغان بولۇپ ، ئاساسلىقى ھېسابلانغان قىممەتنى كۆرسىتىشكە ئىشلىتىلىدۇ. SurveyJS يەنە تۇراقلىق مەزمۇن ئۈچۈن «html» نى قوللايدۇ ، ئەمما ھېسابلانغان قىممەت ئۈچۈن ئىپادىلەش توغرا تاللاش. ھازىر رېئاكسىيە تەرەپ ئۈچۈن. بويسۇنۇش ۋە بويسۇنۇش ناھايىتى ئاددىي. سىمسىز تور API غا ئوخشاش ئۇسۇل - useMutation ياكى ئاددىي ئېلىپ بېرىش ئارقىلىق:
ئىمپورت {useState, useEffect, useRef} "react"; import {useMutation} "@ tanstack / react-query";
ئېكسپورت ئىقتىدارى SurveyForm () {const [model] = useState (() => يېڭى مودېل (surveySchema));
const mutation = useMutation ({ mutationFn: async (سانلىق مەلۇمات) => { const res = ساقلاشنى ساقلاش ("/ api / زاكاز", { ئۇسۇلى: "POST", ماۋزۇلار: {"مەزمۇن تىپى": "application / json"}, body: JSON.stringify (data), }); if (! res.ok) يېڭى خاتالىق تاشلىسا ("تاپشۇرۇش مەغلۇب بولدى"); return res.json (); }, });
const mutationRef = useRef (mutation); mutationRef.current = mutation; useEffect ())> // ref ھەر بىر كۆرسەتكۈچنى ئۆزگەرتكۈچىنى قايتا تىزىملاشتىن ساقلىنىدۇ.
return ( <> <تەكشۈرۈش مودېلى = {مودېل} /> {mutation.isError &&
قەلەمنى تەكشۈرۈش JS-03-SurveyJS [forked] گە قاراڭ.
ئىشلەتكۈچى ئەڭ ئاخىرقى كۆرۈنگەن بەتنىڭ ئاخىرىغا كەلگەندە تولۇق ئوت ئاپىتى. ئەگەر ئومۇمىي سان 100 دىن ئېشىپ كەتمىسە ھەمدە تەكشۈرۈش بېتى ئاتلاپ ئۆتۈپ كەتسە ، ئۇ يەنىلا توغرا ئېتىلىدۇ ، چۈنكى SurveyJS «ئاخىرقى بەت» نىڭ مەنىسىنى قارار قىلىشتىن بۇرۇن كۆرۈنۈشچانلىقىنى باھالايدۇ. ئاندىن ، sender.data بارلىق جاۋابلارنى بىرىنچى دەرىجىلىك ساھە سۈپىتىدە ھېسابلانغان قىممەت (تارماق ، باج ، ئومۇمىي) بىلەن بىللە ئۆز ئىچىگە ئالىدۇ ، شۇڭا API يۈك يۈكى RHF نۇسخىسىنىڭ onSubmit دا قولدا توپلىغان بىلەن ئوخشاش. ThemutationRef ئەندىزىسى سىز ھەر بىر كۆرسەتكۈچتە ئۆزگىرىدىغان قىممەت ئۈستىدە مۇقىم ھادىسە بېجىرگۈچىگە ئېھتىياجلىق بولغان ھەر قانداق جايغا بارالايسىز ، بۇ توغرىلىق SurveyJS غا ئائىت ھېچقانداق نەرسە يوق.
رېئاكسىيە زاپچاسلىرى ئەمدى ھېچقانداق سودا لوگىكىسىنى ئۆز ئىچىگە ئالمايدۇ. بۇ يەردە ئىشلىتىش ۋاقتى يوق ، شەرتلىك JSX يوق ، قەدەم ھېسابلىغۇچ يوق ، ئىشلىتىش Memo زەنجىرى يوق ، دەرىجىدىن تاشقىرى ئېنىقلىما يوق. رېئاللىق ئەمەلىيەتتە ياخشى بولغان ئىشنى قىلىۋاتىدۇ: زاپچاس بېرىش ۋە ئۇنى API تېلېفونىغا ئۇلاش. رېئاللىقتىن نېمىگە يۆتكەلدى؟
ئەندىشە RHF Stack SurveyJS كۆرۈنۈشچانلىقى JSX تارماق ئاپپاراتلىرى visibleIf ھاسىل قىلىنغان قىممەت useWatch / useMemo ئىپادىلەش مەيدان ھالقىغان قائىدىلەر superRefine Schema conditions يول باشلاش قەدەم ھالىتى Page visibleIf قائىدە ئورنى ھۆججەتلەرگە تارقىتىلدى بۇ پىلاننى مەركەز قىلغان
رېئاكسىيەدە قالىدىغىنى ئورۇنلاشتۇرۇش ، ئۇسلۇب ، يوللاش سىملىرى ۋە ئەپلەرنى بىرلەشتۈرۈش ، يەنى React نىڭ ئەمەلىيەتتە لايىھەلەنگەنلىكى. باشقا ھەممە نەرسە بۇ پىلانغا يۆتكەلدى ، بۇ پىلان پەقەت JSON ئوبيېكتى بولغاچقا ، ئۇنى سانداندا ساقلىغىلى بولىدۇ ، قوللىنىشچان پروگراممىڭىزنىڭ كودىغا مۇستەقىل ھالدا نەشر قىلالايسىز ياكى ئورۇنلاشتۇرۇشنى تەلەپ قىلمايلا ئىچكى قوراللار ئارقىلىق تەھرىرلىگىلى بولىدۇ. تەكشۈرۈش بېتىنى قوزغىتىدىغان چەكنى ئۆزگەرتىشكە ئېھتىياجلىق بولغان مەھسۇلات دېرىكتورى زاپچاسقا تەگمەي تۇرۇپ قىلالايدۇ. بۇ شەكىل ھەرىكىتى دائىم تەرەققىي قىلىدىغان ، ھەمىشە ئىنژېنېرلار تەرىپىدىن قوزغىتىلمايدىغان كوماندىلار ئۈچۈن ئەھمىيەتلىك مەشغۇلات پەرقى. ھەر بىر ئۇسۇلنى قاچان ئىشلىتىش كېرەك؟ بۇ ماڭا ماس كېلىدىغان ياخشى قائىدە: جەدۋەلنى پۈتۈنلەي ئۆچۈرۈۋېتىشنى تەسەۋۋۇر قىلىپ بېقىڭ. نېمىنى يوقىتىسىز؟
ئەگەر ئۇ ئېكران بولسا ، زاپچاس قوزغىتىش شەكلىگە ئېھتىياجلىق بولىسىز. ئەگەر ئۇ سودا لوگىكىسى ، چەك چېكى ، شاخلىنىش قائىدىسى ۋە ھەقىقىي قارارلارنى ئۆز ئىچىگە ئالغان شەرتلىك تەلەپلەرگە ئوخشاش بولسا ، سىز بىر لايىھە ماتورىغا ئېھتىياجلىق بولىسىز.
ئوخشاشلا ، ئەگەر يولىڭىزدىكى ئۆزگىرىشلەر كۆپىنچە بەلگە ، مەيدان ۋە ئورۇنلاشتۇرۇشقا مۇناسىۋەتلىك بولسا ، RHF سىزگە ياخشى مۇلازىمەت قىلىدۇ. ئەگەر ئۇلار سىزنىڭ تاللىشىڭىز ياكى قانۇنىي گۇرۇپپىڭىز سەيشەنبە كۈنى چۈشتىن كېيىن بېلەت ئالماي تەڭشەشكە ئېھتىياجلىق بولغان شەرت ، نەتىجە ۋە قائىدىلەرگە مۇناسىۋەتلىك بولسا ، SurveyJS بىلەن بولغان لايىھە ئەندىزىسى تېخىمۇ سەمىمىي ماس كېلىدۇ. بۇ ئىككى خىل ئۇسۇل ھەقىقەتەن بىر-بىرى بىلەن رىقابەتلەشمەيدۇ. ئۇلار ئوخشىمىغان تۈردىكى مەسىلىلەرنى ھەل قىلىدۇ ، ساقلىنىشقا ئەرزىيدىغان خاتالىق بولسا ئابستراكتنى لوگىكىنىڭ ئېغىرلىقىغا ماسلاشماسلىق - قائىدە سىستېمىسىنى زاپچاسقا ئوخشاش مۇئامىلە قىلىش ، چۈنكى ئۇ تونۇش قورال ، ياكى سىياسەت ماتورىغا يېتىش ، چۈنكى بىر شەكىل ئۈچ باسقۇچقا ئۆرلەپ شەرتلىك ساھەگە ئېرىشتى. بىز بۇ يەردە قۇرغان شەكىل قەستەن چېگراغا يېقىن بولۇپ ، پەرقنى ئاشكارىلايدىغان دەرىجىدە مۇرەككەپ ، ئەمما بەك ھەددىدىن ئاشمايدۇ ، سېلىشتۇرۇش قاتتىق دەپ قارايدۇ. كود يەشكۈچتە قالايمىقانلىشىپ كەتكەن كۆپىنچە ھەقىقىي شەكىللەر بەلكىم ئوخشاش چېگراغا يېقىن جايدا ئولتۇرۇشى مۇمكىن ، مەسىلە ئادەتتە ھەر بىر كىشىنىڭ ئۆزىنىڭ ھەقىقىي ئىسمىنى قويغان-قويمىغانلىقىدا. React Hook Form + Zod نى ئىشلىتىڭ:
جەدۋەللەر CRUD نى ئاساس قىلغان. لوگىكا تېيىز ۋە UI قوزغىتىلغان. ئىنژېنېرلار بارلىق ھەرىكەتلەرگە ئىگىدارچىلىق قىلىدۇ ئارقا كۆرۈنۈش يەنىلا ھەقىقەتنىڭ مەنبەسى.
SurveyJS نى ئىشلىتىڭ:
جەدۋەل سودا قارارىنى كودلايدۇ. قائىدە UI دىن مۇستەقىل تەرەققىي قىلىدۇ. لوگىكا چوقۇم كۆرۈنۈشچان ، ئۈندىدار ياكى نەشر قىلىنغان بولۇشى كېرەك. ئىنژېنېر بولمىغانلار ھەرىكەتكە تەسىر كۆرسىتىدۇ ئوخشاش جەدۋەل چوقۇم كۆپ تەرەپنى بېسىپ ئۆتۈشى كېرەك.