He mea tautoko tenei tuhinga e SurveyJS He tauira hinengaro te nuinga o nga kaiwhakawhanake React e tohatoha ana me te kore korero nui. Ko nga puka e kiia ana he waahanga tonu. Ko te tikanga tenei he puranga penei:
Puka Matau Whakahohe mo te kawanatanga o te rohe (he iti te whakahoki ano, te rehitatanga mara ergonomic, te taunekeneke nui). Zod mo te whakamanatanga (tikanga whakauru, whakamana rohenga, momo-haumaru porotiti). Uiui Tauhohenga mo te tuara: te tuku, te ngana ano, te keteroki, te tukutahi tūmau, me era atu.
A mo te nuinga o nga puka - o mata takiuru, o wharangi tautuhinga, o CRUD modals - he pai te mahi. Ko ia waahanga ka mahi, ka tito ma, ka taea e koe te neke ki nga waahanga o to tono e tino rerekee ana i to hua. Engari i ia wa, ka timata te ahua ki te whakaemi i nga mea penei i nga ture tirohanga e whakawhirinaki ana ki nga whakautu o mua, ki nga uara i ahu mai i nga waahi e toru. Akene ko nga wharangi katoa ka pekehia, ka whakaatuhia ranei i runga i te tapeke e rere ana. Ka mau koe i te herenga tuatahi ma te whakamahiWatch me te peka raina, he pai. Katahi tetahi atu. Na kei te toro atu koe ki te superRefine ki te whakawaehere i nga ture-a-marae kaore e taea e to kaupapa Zod te whakaatu i te tikanga. Na, ka timata te whakatere hikoi ki te tuku i te arorau pakihi. I etahi wa, ka titiro koe ki nga mea i hangaia e koe ka mohio ko te puka ehara i te mea tino UI. He mahi whakatau, a ko te rakau waahanga kei te waahi tonu koe ki te penapena. Koinei taku whakaaro ka pakaru te tauira hinengaro mo nga puka i roto i te React, karekau he he. He tino pai te taapu RHF + Zod ki te mea i hangaia mo. Ko te take ko te kaha ki te whakamahi i mua i te waahi e rite ana ana tangohanga ki te raru na te mea he rereke te whakaaro mo nga puka. Ko tenei tuhinga mo tera rereke. Hei whakaatu i tenei, ka hangahia e matou te ahua o nga waahanga-maha kia rua:
Me te Puka Matau React + Zod kua waeahia ki te Uiui Whakahohe mo te tukunga, Ma te SurveyJS, e tohu ana i tetahi puka hei raraunga - he kaupapa JSON ngawari - kaua ki te rakau waahanga.
He rite ano nga whakaritenga, he rite te arorau here, he karanga API ano i te mutunga. Na ka mapi tonu tatou i nga mea i neke me nga mea i noho, me te whakatakoto i tetahi huarahi whaitake hei whakatau ko tehea tauira ka whakamahia e koe, me ahea. Ko te ahua e hanga ana e matou:
Ka whakamahia e tenei puka he rerenga 4-taahiraa: Hipanga 1: Taipitopito
Ingoa tuatahi (hiahiatia), Īmēra (e hiahiatia ana, hōputu whaimana).
Hipanga 2: Whakaritea
Utu wae, Rahi, Te utu taake, I ahu mai: Tapekeroto, Taake, Tapeke.
Hipanga 3: Pūkete & Urupare
He kaute kei a koe? (Ae/Kao) Mena Ae → ingoa kaiwhakamahi + kupuhipa, me hiahia nga mea e rua. Ki te Kao → kua kohia te imeera i te taahiraa 1.
Whakatauranga pai (1–5) Mena ≥ 4 → patai “He aha taau i pai ai?” Mēnā ≤ 2 → pātaihia “He aha tā mātou e pai ake ai?”
Hipanga 4: Arotake
Ka puta anake mena ka tapeke >= 100 Te tukunga whakamutunga.
Ehara tenei i te tino taikaha. Engari he nui ki te whakaatu i nga rereketanga o te hoahoanga. Wāhanga 1: Waahanga-Taia (React Hook Form + Zod) Tāutatanga npm tāuta react-hook-form zod @hookform/resolvers @tanstack/react-query
Kaupapa Zod Me timata tatou ki te kaupapa Zod, na te mea ko te tikanga ka tuu te ahua o te ahua. Mo nga hikoinga tuatahi e rua - nga taipitopito whaiaro me nga whakauru whakauru - he maamaa nga mea katoa: nga aho e hiahiatia ana, nga nama me te iti, me te enum. Ka timata te wahanga whakamere i te wa e ngana ana koe ki te whakapuaki i nga ture herenga.
kawemai {z} mai i "zod";
export const formSchema = z.object({ Ingoa tuatahi: z.string().min(1, "E hiahiatia ana"), email: z.string().email("Imera muhu"), utu: z.number().min(0), rahinga: z.number().min(1), TaakeRate: z.number(), hasAccount: z.enum" kupuhipa: z.string().kōwhiringa(), pai: z.number().min(1).max(5), positiveFeedback: z.string().optional(), improvementFeedback: z.string().kōwhiringa(),}).superRefine((data, ctx) => { if (data.hasAccount === "Ae") { if (!ctsuxusername) { dd ["ingoa kaiwhakamahi"], karere: "E hiahiatia ana" }); } if (!data.password || data.password.length <6) {ctx.addIssue({code: "rite", ara: ["kupuhipa"], karere: "Min 6 characters" } }
ki te (data.satisfaction >= 4 && !data.positiveFeedback) {ctx.addIssue({waehere: "ritenga", ara: ["positiveFeedback"], karere: "Tena koa tohatoha i taau i pai ai"}); }
ki te (data.satisfaction <= 2 && !data.improvementFeedback) {ctx.addIssue({waehere: "ritenga", ara:["improvementFeedback"], karere: "Tena korero mai ki a matou he aha hei whakapai ake" }); }});
momo kaweake FormData = z.infer
Kia mahara ko te ingoa kaiwhakamahi me te kupuhipa ka patohia hei kowhiringa() ahakoa e hiahiatia ana na te mea ko te aronuinga taumata-momo a Zod e whakaatu ana i te ahua o te ahanoa, kaua ko nga ture e whakahaere ana i te wa e pa ana nga mara. Ko te whakaritenga herenga me noho ki roto i te superRefine, ka rere i muri i te whakamanatanga o te hanga me te whai waahi ki te katoa o te ahanoa. E hara taua wehenga i te he; he aha te taputapu i hangaia mo: ko te superRefine te wahi e haere ai te arorau whiti-marae ina kore e taea te whakaatu i roto i te hanganga aronuinga. Ko te mea nui i konei ko te mea kaore e whakaatuhia e tenei kaupapa. Karekau he ariā mo nga wharangi, karekau he ariā e kitea ana nga mara i tera waahi, karekau he ariā mo te whakatere. Ka noho era katoa ki tetahi atu wahi. Wae Puka
kawemai { useForm, useWatch } mai i "react-hook-form"; kawemai {zodResolver } mai i "@hookform/resolvers/zod"; kawemai { useMutation } mai i "@tanstack/react-query"; kawemai { useState, useMemo } mai i "react"; kawemai {formSchema, momo Raraungaraunga}"
const STEPS = ["details", "order", "account", "review"];
momo OrderPayload = PukaRaraunga & { tapeke iti: tau; tāke: tau; tapeke: tau };
mahi kaweake RHFMultiStepForm() {const [step, setStep] = useState(0);
const mutation = useMutation({ mutationFn: async (utu utu: OrderPayload) => { const res = tatari tiki("/api/orders", { tikanga: "POST", pane: { "Momo-Ihirangi": "tono/json"}, tinana: JSON.stringify(utu utu), }); if (!res.ok) throw new Hapa("I rahua ki te tuku"); whakahokia res.json(); }, });
const {rehita, mana, handleSubmit, formState: { errors }, } = useForm
hoki mai (
);}Tirohia te Pen SurveyJS-03-RHF [kua marau] na te onomatemate. He maha nga mea e pa ana ki konei, a he mea tika kia puhoi ki te kite i te mutunga o nga mea.
Ko nga uara i ahu mai - te taake, te taake, te tapeke - ka tatauhia i roto i te waahanga ma te whakamahiWatch and useMemo na te mea ka whakawhirinaki ki nga uara mara ora, kaore he waahi taiao mo ratou. Ko nga ture whakakitenga mo te ingoa kaiwhakamahi, te kupuhipa, te urupare pai, me te whakapaingaKo te urupare kei JSX hei herenga raina. Ko te arorau pekepeke — ka puta anake te wharangi arotake ina te tapeke >= 100 — ka whakaurua ki roto i te taurangi whakaatuTukuhia me te ahua taahua i te taahiraa 3. Ko te Whakaterenga ake he kaitautai whakamahiState e whakanuia ana e matou. Ka whakahaere a React Query i nga whakamatautau, keteroki, me te muhu. Ka karanga noa te puka i te mutation.mutate me nga raraunga whaimana.
Kaore tetahi o enei i he, mo ia. Ko te React idiomatic tonu tenei, a he pai te mahi o te waahanga na te ahua o te wehe a RHF ki te whakahoki ano. Engari mena ka tukuna e koe tenei ki tetahi kare ano i tuhi ka tono kia whakamarama mai he aha nga ahuatanga ka puta mai te wharangi arotake, me whai ratou ma te whakaatu Tukuna, te taahiraa 3 whakaatu tikanga, me te arorau paatene nav — e toru nga waahi motuhake — ki te hanga ano i tetahi ture ka taea te korero ki te rarangi kotahi. Ka mahi te ahua, ae, engari kaore e tino tirohia te whanonga hei punaha. Me mahi hinengaro. Ko te mea nui ake, ko te whakarereke me whai waahi ki te miihini. Ahakoa he paku iti, penei i te whakatikatika i te wa e whakaatu ana te taahiraa arotake, ko te whakatika i te waahanga, te whakahou i te whakamana, te whakatuwhera i te tono toia, te tatari mo te arotake, me te tuku ano. Wāhanga 2: Arahanga-Aia (SurveyJS) Inaianei kia hangahia te rerenga rite ma te whakamahi i te aronuinga. Tāutatanga npm tāuta rangahau-matua rangahau-react-ui @tanstack/react-query
rangahau-matuaKo te MIT-raihana turanga-motuhake te miihini whakahaere e kaha ana te whakaputa puka a SurveyJS - ko te waahanga e aro nui ana ki konei. Ka tangohia he kaupapa JSON, ka hangaia he tauira o roto mai i a ia, ka whakahaere i nga mea katoa e noho ana i roto i to wahanga React: te arotake i nga whakaaturanga whakakitenga, te whakatau i nga uara i ahu mai, te whakahaere i te ahua o te whaarangi, te whai mana whai, me te whakatau he aha te tikanga "kua oti" te tikanga ko tehea wharangi i tino whakaatuhia.
rangahau-react-uiKo te paparanga UI / whakaatu e hono ana i taua tauira ki te React. Ko te tikanga he waahanga
Tahi, ka hoatu ki a koe he wa mahi tino mahi, puka maha-wharangi, me te kore e tuhi i tetahi rarangi rere mana. Ko te whakatakotoranga aronuinga ake, pera i te korero i mua, he JSON noa - kaore he DSL, tetahi mea rangatira ranei. Ka taea e koe te whakarārangitia, te kawemai mai i te konae, te tiki mai i te API, te penapena ranei ki roto i te poupae raraunga ka whakamakuku i te waa whakahaere. Te Puka Ōrite, Hei Raraunga Anei te ahua ano, i tenei wa ka whakaatuhia he ahanoa JSON. Ka tautuhia e te aronuinga nga mea katoa: te hanganga, te whakamanatanga, nga ture tirohanga, nga tatauranga i ahu mai, te whakatere wharangi - ka tukuna ki tetahi Tauira e arotake ana i te waa whakahaere. Anei te ahua o te katoa:
export const surveySchema = { title: "Order Rere", showProgressBar: "runga", wharangi: [ { ingoa: "taipitopito", huānga: [ { momo: "kuputuhi", ingoa: "Ingoa Tuatahi", heRequired: pono }, {momo: "kuputuhi", ingoa: "imeera", inputType: "imera", isRequired: [{, momo: "imeera" }] } ] }, {ingoa: "raupapa", huānga: [ { momo: "kuputuhi", ingoa: "utu", inputType: "tau", defaultValue: 0 }, { momo: "kuputuhi", ingoa: "rahi", inputType: "tau", defaultValue: 1 }, { momo: "whakaheke",ingoa: "TaxRate", defaultValue: 0.1, kōwhiringa: [ { uara: 0.05, kuputuhi: "5%" }, { uara: 0.1, kuputuhi: "10%" }, { uara: 0.15, kuputuhi: "15%" } ] }, { momo: "whakapuaki", ingoa: "te rahinga", kupu: "whakapuaki", ingoa: "tax", kupu: "{total} {taxRate}" }, { momo: "whakapuaki", ingoa: "tapeke", kupu: "{tapeketanga} + {tax}" } ] }, {ingoa: "pūkete", huānga: [ {momo: "Rōpū reo irirangi", ingoa: "he Pūkete", he tohu: "Ki te mea", "Kao ingoa:"Ae}", "Kaore he ingoa" "{hasAccount} = 'Ae'", isRequired: pono }, { type: "kuputuhi", ingoa: "password", inputType: "password", visibleIf: "{hasAccount} = 'Ae'", isRequired: pono, validators: [{ momo: "kuputuhi", minLength: 6, kuputuhi: "Min 6 characters", {type}: "Tis: Min 6 characters", {type}: "Tis: Min 6 characters", {type}:" 1, rateMax: 5 }, { momo: "whakaaro", ingoa: "positiveFeedback", visibleIf: "{satisfaction} >= 4" }, {momo: "comment", name: "improvementFeedback", visibleIf: "{satisfaction} <= 2" } ] } }, {name: "{0}": "kite": ]};
Whakatauritea tenei ki te putanga RHF mo te wa poto.
Kua ngaro te poraka superRefine e hiahiatia ana te ingoa kaiwhakamahi me te kupuhipa. visibleIf: "{hasAccount} = 'Ae'" kua honoa ki te isRequired: ko te pono e whakahaere tahi ana i nga awangawanga e rua, i runga i te mara ake, kei hea koe e rapu ai. Ko te mekameka useWatch + useMemo i tatau i te tapeke-iti, te taake, me te tapeke ka whakakapihia e nga mara korero e toru e tohutoro ana tetahi ki tetahi ma te ingoa. Ko te ahua o te wharangi arotake, i roto i te putanga RHF ka taea te hanga ano ma te whai i te whakaaturangaTukuma, te peka render o te taahiraa 3. Ka mutu, ko te arorau paatene nav he taonga kitea mena kei runga i te ahanoa wharangi.
He rite tonu te arorau. Ko te mea ka hoatu e te aronuinga he waahi noho ki te waahi ka kitea mokemoke, kaua ki te horapa puta noa i te waahanga. Me mahara ano ka whakamahia e te aronuinga te momo: 'whakapuaki' mo te tapeke iti, te taake, me te tapeke. He panui-anake te korero ka whakamahia hei whakaatu i nga uara tatau. E tautoko ana hoki a SurveyJS i te momo: 'html' mo nga ihirangi pateko, engari mo nga uara tatau, ko te korero te mea tika. Inaianei mo te taha React. Te Tukunga Me te Tukunga Tino ngawari. Waea ki te Whakaoti ki to API pera ano - ma te whakamahiMutation, te tiki noa ranei:
kawemai { useState, useEffect, useRef } mai i "react"; kawemai { useMutation } mai i "@tanstack/react-query"; kawemai { Tauira } mai i "survey-core"; kawemai { Survey } from "survey-react-ui"; kawemai "survey-core/survey-core.css";
mahi kaweake SurveyForm() { const [tauira] = useState(() => Tauira hou(surveySchema));
const mutation = useMutation({ mutationFn: async (raraunga) => { const res = tatari tiki("/api/orders", { tikanga: "POST", pane: { "Momo-Ihirangi": "tono/json"}, tinana: JSON.stringify(raraunga), }); if (!res.ok) throw new Hapa("I rahua ki te tuku"); whakahokia res.json(); }, });
const mutationRef = useRef(mutation); mutationRef.current = hurihanga; useEffect(() => { const handler = (kaituku) => mutationRef.current.mutate(sender.data);model.onComplete.add(kaiwhakahaere); return () => model.onComplete.remove(kaiwhakahaere); }, [tauira]); // Ref ka karo i te rehita ano i te kaihautu i ia tukunga (whakarereke i te tuakiri ahanoa whakarereke)
hoki mai (
<>
Tirohia te Pen SurveyJS-03-SurveyJS [kua marau] na te onomatemate.
onComplete ahi ina tae te kaiwhakamahi ki te mutunga o te wharangi kua kitea. Na, ki te kore e eke te tapeke ki te 100 ka pekehia te wharangi arotake, ka tika tonu te ahi na te mea ka arotakehia e SurveyJS te tirohanga i mua i te whakatau he aha te tikanga o te "wharangi whakamutunga". Na, kei roto i te sender.data nga whakautu katoa me nga uara tatau (tapeke iti, taake, tapeke) hei mara karaehe tuatahi, no reira he rite te utunga API ki ta te putanga RHF i whakaemi a-ringatia i runga i te tuku. Ko teKo te tauira mutationRef he rite tonu ki a koe mo nga waahi katoa e hiahia ana koe ki te kaikawe huihuinga pumau mo te uara ka huri i runga i ia whakaputanga - kaore he SurveyJS-motuhake mo taua mea.
Ko te wahanga React kua kore he arorau pakihi. Karekau he maataki, karekau he JSX herenga, karekau he porotiti takahanga, karekau he mekameka whakamahiMemo, kaore he superRefine. Kei te mahi a React i te mea tino pai: te whakaputa i tetahi waahanga me te waea ki te waea API. He aha te mea i neke atu i te tauhohenga?
Awangawanga RHF Tāpae SurveyJS Tirohanga JSX manga kiteaKi te Nga uara i ahu mai whakamahiWatch / useMemo whakapuakitanga Nga ture whakawhiti-mara superRefine Nga tikanga kaupapa Whakaterenga ahua taahiraa Whārangi ka kiteaKi te Tauwāhi ture Ka tohatohahia puta noa i nga konae I roto i te kaupapa
Ko te mea e mau tonu ana ki te React ko te whakatakotoranga, te whakaahua, te waea tukunga, me te whakaurunga taupānga, ara, ko nga mea React i hangaia mo. Ko nga mea katoa i neke ki roto i te aronuinga, a na te mea he ahanoa JSON noa te aronuinga, ka taea te penapena ki roto i te paataka raraunga, te whakaputa motuhake mai i to waehere tono, ka whakatikahia ranei ma te taputapu o roto me te kore e toha. Ko te kaiwhakahaere hua e hiahia ana ki te whakarereke i te paepae e whakaoho ana i te wharangi arotake ka taea te mahi me te kore e pa ki te waahanga. He rerekeetanga mahi whai tikanga mo nga roopu e tipu haere tonu ana te ahua o te ahua, kaore i te akiakihia e nga miihini. Ahea te whakamahi i ia huarahi? Anei tetahi tikanga pai mo au: whakaarohia te whakakore katoa i te puka. He aha koe ka ngaro?
Mena he mata, kei te hiahia koe ki nga puka-a-waahanga. Mena he arorau pakihi, penei i nga paepae, nga ture manga, me nga whakaritenga herenga e whakawaehere ana i nga whakatau tuturu, ka hiahia koe ki te miihini hangahanga.
Waihoki, mena ko nga huringa ka pa mai ki a koe mo nga tapanga, mara, me te tahora, ka pai te mahi a RHF ki a koe. Mena ko nga tikanga, nga hua, me nga ture e tika ana kia whakatikahia e to ops, roopu ture ranei i te ahiahi o te Paraire me te kore e tuku tiiti, ko te tauira kaupapa me SurveyJS te tino tika. Ko enei huarahi e rua kaore i te tino whakataetae tetahi ki tetahi. Ka whakatauhia e ratou nga momo raru rereke, a ko te pohehe e tika ana kia karohia ko te kore e rite ki te tangohanga ki te taumaha o te arorau - te whakarite i te punaha ture ano he waahanga na te mea koinei te taputapu mohio, te toro atu ranei ki te miihini kaupapa here na te mea kua piki te ahua ki te toru nga kaupae ka whiwhi i tetahi mara here. Ko te ahua i hangahia e matou ki konei e noho tata ana ki te rohe, he uaua ki te whakaatu i te rereketanga engari ehara i te mea tino nui kia rite te whakataurite. Ko te nuinga o nga momo ahua karekau e kaha ki roto i to turanga waehere ka noho tata ki taua rohe ano, a ko te patai ko te tikanga ko te mea kua whakaingoatia e te tangata he aha ratou. Whakamahia te Puka Matau React + Zod ina:
Ko nga puka he CRUD-oriented; Ko te arorau he papaku me te UI-peia; Na nga miihini nga whanonga katoa; Ko Backend te puna o te pono.
Whakamahia te SurveyJS ina:
Puka whakawaehere whakatau pakihi; Ko nga ture ka whanake motuhake i te UI; Ko te arorau me kitea, ka taea te tirotiro, te whakaputa ranei; Ka awehia e te hunga miihini kore te whanonga; Ko te ahua ano me rere puta noa i nga waahanga maha.