Nin barokun in ye SurveyJS ka dɛmɛn ye Hakilila-modɛli dɔ bɛ yen min bɛ React dilannikɛlaw fanba tila k’a sɔrɔ u ma baro kɛ o kan ni kanba ye abada. Ko sɛbɛnw ka kan ka Kɛ ‘fɛnw ye tuma bɛɛ. O kɔrɔ ye ko stack i n’a fɔ:
React Hook Form for local state (minimal re-renders, ergonomic field registration, imperative interaction). Zod ka ɲɛsin tiɲɛni ma (donni tiɲɛni, dancɛ tiɲɛni, suguya-safe parsing). React Query for backend: cikan, segin-ka-bɔnye, caching, server sync, ani o ɲɔgɔnnaw.
Wa foroko fanba la — i ka dondaw, i ka sigida ɲɛw, i ka CRUD modaliw — o bɛ baara kɛ kosɛbɛ tiɲɛ na. O yɔrɔ kelen-kelen bɛɛ b’a ka baara kɛ, u bɛ daɲɛw labɛn ka ɲɛ, wa i bɛ se ka taa i ka baarakɛminɛn yɔrɔw la minnu bɛ i ka fɛn dilannen danfara tiɲɛ na. Nka siɲɛ kelen-kelen bɛɛ, foroko dɔ bɛ daminɛ ka fɛnw dalajɛ i n’a fɔ yecogo sariyaw minnu bɛ bɔ jaabi fɔlɔw la, walima nafa sɔrɔlenw minnu bɛ wuli ka tɛmɛ foro saba fɛ. Laala hali ɲɛ kuuru minnu ka kan ka tɛmɛ walima ka jira ka da u bɛɛ lajɛlen kan minnu bɛ boli. I bɛ sarati fɔlɔ ɲɛnabɔ ni useWatch ye ani inline bolofara ye, o ka ɲi. O kɔ fɛ, dɔ wɛrɛ. O kɔ fɛ i b’i bolo Se superRefine ma walasa ka cross-field sariyaw kodɔn, i ka Zod schema tɛ Se k’olu Fɔ cogo la min bɛ Kɛ a cogo la. O kɔfɛ, senna-taama-sira bɛ daminɛ ka jagokɛlaw ka hakilinaw bɔ kɛnɛ kan. Waati dɔ la, i ye min jɔ, i b’o lajɛ k’a ye ko sɛbɛn in tɛ UI ye tiɲɛ na tugun. A ka ca ni latigɛ kɛcogo ye, wa component tree bɛ yɔrɔ min na dɔrɔn i y’a mara yɔrɔ min na. Nin yɔrɔ in de la n hakili la hakili-la-modɛli min bɛ forokow la React kɔnɔ, o bɛ tiɲɛ, wa tiɲɛ na, mɔgɔ si ka jalaki tɛ. RHF + Zod stack ka ɲi kosɛbɛ a dabɔra min kama. Ko min bɛ yen, o ye ko an b’a fɛ ka To ka baara Kɛ n’a ye ka Tɛmɛ yɔrɔ min na a ka abstractions (daɲɛw) bɛ Bɛn ni gɛlɛya ye yɔrɔ min na bari a nɔfɛta bɛ miiri cogo wɛrɛ Лini cogoyaw kan pewu. Nin barokun bɛ kuma o fɛɛrɛ wɛrɛ kan. Walasa k’o jira, an bɛna taabolo caman-sɛbɛn kelen tigitigi jɔ siɲɛ fila:
Ni React Hook Form + Zod sirilen don React Query la walasa ka ci, Ni SurveyJS ye, min bɛ foroko dɔ minɛ i n’a fɔ kunnafoni — JSON schema nɔgɔman — sanni ka kɛ jiribolo ye.
Wajibiya kelenw, sariyataamacogo kelen, API weleli kelen laban na. O kɔfɛ, an bɛna fɛn min jiginna ani min tora, an bɛna o karti tigitigi, ka fɛɛrɛ ɲuman dɔ labɛn walasa k’a latigɛ i ka kan ka baara kɛ ni modɛli min ye, ani waati min na. An bɛ foroko min jɔ:
Nin sɛbɛn in bɛna baara kɛ ni taabolo 4 ye: Taabolo fɔlɔ: Fɛn fitininw
Tɔgɔ fɔlɔ (a wajibiyalen don), . Email (a wajibiyalen don, a cogoya bɛnnen don).
Taabolo 2nan: Aw ye komandi kɛ
Unit sɔngɔ, . Hakɛ, . Takisi hakɛ, . A bɔra: Subtotal, 1999. Takisi, . Total (Jɛkulu bɛɛ lajɛlen).
Taabolo 3nan: Jatebɔ & Ladilikanw
Yala jatebɔsɛbɛn b’i bolo wa? (Ɔwɔ/Ayi) Ni Ɔwɔ → baarakɛla tɔgɔ + tɔgɔlasɛbɛn, o fila bɛɛ wajibiyalen don. Ni Ayi → email lajɛra kaban taamasiɲɛ 1 na.
Wasa hakɛ (1–5) . Ni ≥ 4 → aw bɛ ɲininkali kɛ “Mun diyara aw ye?” Ni ≤ 2 → ɲininkali “An bɛ se ka mun ɲɛ?”
Step 4: Review
A bɛ jira dɔrɔn ni a bɛɛ lajɛlen >= 100 Laseli laban.
O tɛ dantɛmɛko ye. Nka a bɛ se ka danfara minnu bɛ fɛn dilanni na, olu bɔ kɛnɛ kan. Yɔrɔ fɔlɔ: A bɛ ɲɛminɛ ni fɛnw ye (React Hook Form + Zod) . Installation (dadon) kɛli npm ka react-hook-form zod sigi @hookform/resolvers @tanstack/react-query la
Zod ka Skema An k’a daminɛ ni Zod schema ye, bawo a ka c’a la, o yɔrɔ de la foroko cogoya bɛ Sìgi sen kan. Taabolo fɔlɔ fila kama — mɔgɔ yɛrɛ ka kunnafoniw ani komandi dontaw — fɛn bɛɛ bɛ ɲɛ: sɛrɛkili wajibiyalenw, jateden minnu ka dɔgɔn, ani enum. Yɔrɔ min ka di, o bɛ daminɛ n’i y’a ɲini ka sariyakolow fɔ minnu bɛ kɛ ni sariya ye.
import { z } ka bɔ "zod" la;
export const formSchema = z.object({ Tɔgɔ fɔlɔ: z.string().min(1, "Wajibiya"), email: z.string().email("Email tiɲɛnen"), sɔngɔ: z.number().min(0), hakɛ: z.number().min(1), taxRate: z.number(), hasAccount: z.enum(["Yes", "No"]), baarakɛla tɔgɔ: z.string().optional(), password: z.string().optional(), wasa: z.number().min(1).max(5), positiveFeedback: z.string().optional(), improvementFeedback: z.string().optional(),}).superRefine((data, ctx) => { ni (data.hasAccount === "Yes") { ni (!data.username) { ctx.addIssue({ kode: "lada", sira: ["baarakɛla tɔgɔ"], cikan: "Wajibiya" }); } if (!data.password || data.password.length < 6) { ctx.addIssue({ code: "custom", sira: ["daɲɛgafe"], cikan: "Min 6 characters" });
if (data.satisfaction >= 4 && !data.positiveFeedback) { ctx.addIssue({ code: "custom", sira: ["positiveFeedback"], cikan: "Aw ye min diya aw ye, aw k'o tila" }); } .
ni (data.wasa <= 2 && !data.ɲɛnabɔliFeedback) { ctx.addIssue({ kode: "laada", sira:["improvementFeedback"], message: "Aw ka kan ka min ɲɛnabɔ, aw k'o fɔ an ye" }); }});
bɔli suguya FormData = z.infer;
A kɔlɔsi ko baarakɛla tɔgɔ ni tɔgɔlasɛbɛn bɛ sɛbɛn i n’a fɔ optional() hali n’u wajibiyalen don ni sarati ye bawo Zod ka type-level schema bɛ fɛn in cogoya ɲɛfɔ, a tɛ sariyaw ye minnu bɛ forow nafa jira waati min na. Sarati wajibiyalen ka kan ka balo superRefine kɔnɔ, min bɛ boli cogoya in tiɲɛni kɔfɛ ani ka se ka fɛn dafalen sɔrɔ. O farali tɛ fili ye; o ye baarakɛminɛn in dabɔra min kama dɔrɔn: superRefine ye yɔrɔ ye cross-field logic bɛ taa yɔrɔ min na n’a tɛ se ka fɔ schema structure yɛrɛ kɔnɔ. Fɛn min fana kɔlɔsira yan, o ye nin sɛbɛ in tɛ min Fɔ. A hakilina tɛ ɲɛw kan, hakilina t’a la ko foro minnu bɛ Ye yɔrɔ jumɛn na, wa hakilina tɛ a la ka ɲɛsin taamacogo ma. O bɛɛ bɛna sigi yɔrɔ wɛrɛ la. Formulaire Component (Formulaire Component) ye
import { useForm, useWatch } ka bɔ "react-hook-form";import { zodResolver } ka bɔ "@hookform/resolvers/zod";import { useMutation } ka bɔ "@tanstack/react-query";import { useState, useMemo } ka bɔ "react";import { formSchema, type FormData } ka bɔ "./schema
const STEPS = ["detail", "order", "jate", "seginkanni"];
type OrderPayload = FormData & { subtotal: number; takasi: jateden; total: jateden };
export function RHFMultiStepForm () { const [taamasenɲɛ, sigicogo] = baarakɛcogo Jamana (0);
const mutation = baarakɛcogoMutation({ mutationFn: async (nafalan: Ladilikan sarali) => { const res = jira fetch ("/api/cikanw", { fɛɛrɛ: "POST", headers: { "Kɔnɔkow-suguya": "application/json" }, farikolo: JSON.stringify (nafa sɔrɔli), . }); ni (!res.ok) throw new Error("A ma se ka ci"); segin res.json (); }, . });
const { sɛbɛnni, kunnafoni, handleSubmit, formState: { filiw }, } = useForm
return (
);}Aw ye Pen SurveyJS-03-RHF [forked] lajɛ ni sixthextinction ye. Ko caman bɛ ka kɛ yan, wa a ka kan ka sumaya walasa k’a kɔlɔsi ko kow labanna yɔrɔ min na.
Nafa minnu sɔrɔla — jateden fitinin, impositi, bɛɛ lajɛlen — bɛ jate kɛ yɔrɔ la useWatch ni useMemo fɛ bawo u bɛ bɔ foro nafa ɲɛnamaw de la wa yɔrɔ dafalen wɛrɛ t’u ye. Yecogo sariyaw minnu bɛ baarakɛla tɔgɔ, tɔgɔlasɛbɛn, positiveFeedback, ani improvementFeedback kan, olu bɛ JSX kɔnɔ i n’a fɔ inline conditionals. Senna-tɛgɛrɛ-taamaʃyɛn — seginnkanni ɲɛ min bɛ Bɔ dɔrɔn ni a bɛɛ lajɛlen >= 100 — o bɛ Dòn showSubmit fɛn caman sɛgɛsɛgɛli la ani render cogoya la taamaʃyɛn 3nan na. Navigation yɛrɛ ye useState jatebɔlan dɔrɔn ye an b’a ka dɔ fara min kan bolo la. React Query bɛ segin-ka-bɔnyew, caching ani invalidation ɲɛnabɔ. Formulaire bɛ mutation.mutate wele dɔrɔn ni data validées ye.
Ninnu si tɛ kojugu ye, a yɛrɛ la. Nin ye hali bi idiomatic React ye, wa component bɛ baara kɛ kosɛbɛ k’a sababu kɛ RHF isolates re-renders cogo la. Nka n’i y’o Di mɔgɔ dɔ ma min m’a sɛbɛn k’a ɲini u fɛ u k’a ɲɛfɔ cogo minnu na seginnkanni ɲɛ bɛ bɔ, u ka kan ka tugu showSubmit fɛ, taamasiyɛn 3nan render condition fɛ, ani nav button logic fɛ — yɔrɔ saba danfaralenw — walasa ka sariya dɔ labɛn kokura min tun bɛ se ka fɔ layini kelen kɔnɔ. Foroko bɛ baara kɛ, ɔwɔ, nka kɛcogo tɛ sɛgɛsɛgɛli ye tiɲɛ na i n’a fɔ sistɛm. A ka kan ka faga hakili la. Min nafa ka bon kosɛbɛ, o ye k’a Changer, o bɛ ɛntɛrinɛti sendon de wajibiya. Hali fɛn fitinin dɔ, i n’a fɔ ka ladilan ni seginnkanni taamaʃyɛn y’a Jira, o kɔrɔ ye ka yɔrɔ in Labɛn, ka tiɲɛni Lakurayali, ka sama ɲinini dɔ Dabɔ, ka seginnkanni makɔnɔ, ka segin a kan. Yɔrɔ 2nan: Skema-Driven (SurveyJS) . Sisan an k’o flow kelen in jɔ ni schema ye. Installation (dadon) kɛli npm install sɛgɛsɛgɛli-ko-sɛgɛsɛgɛli-react-ui @tanstack/react-query
survey-coreMIT-licensed platform-independent runtime engine min bɛ SurveyJS ka foroko jiracogo fanga di — an b’an janto yɔrɔ min na yan. A bɛ JSON sɛgɛsɛgɛli ta, ka kɔnɔna modɛli dɔ jɔ a la, ka fɛn bɛɛ ɲɛnabɔ, n’o tɛ, min tun bɛna ɲɛnamaya i ka React yɔrɔ la: yecogo fɔcogo jateminɛni, nafa sɔrɔlenw jatebɔ, ɲɛ cogoya ɲɛnabɔli, tiɲɛni nɔfɛtaama, ani k’a latigɛ “dafalen” kɔrɔ ye min ye k’a da ɲɛ minnu jirala tiɲɛ na.
survey-react-uiUI / rendering layer min bɛ o modɛli ni React cɛsiri. A jɔyɔrɔba ye
Together, they give you a fully functional, multi-page form runtime without writing a single line of control flow. Skema cogoya yɛrɛ ye, i n’a fɔ a fɔra cogo min na ka tɛmɛ, JSON dɔrɔn de don — DSL walima fɛn wɛrɛ tɛ yen min ye a yɛrɛ ta ye. I bɛ se k’a don layini kɔnɔ, k’a ladon ka bɔ dosiye dɔ la, k’a ta ka bɔ API dɔ la, walima k’a mara kunnafonidilan dɔ kɔnɔ k’a ji kɛ a boli waati la. O Foro kelen, I n’a fɔ Data Nin ye o cogo kelen ye, nin sen in na, a jiralen bɛ i n’a fɔ JSON fɛn. Skema bɛ fɛn bɛɛ ɲɛfɔ: sigicogo, tiɲɛni, yecogo sariyaw, jatebɔ bɔlenw, ɲɛw lajɛcogo — k’a di Modeli dɔ ma min b’a jateminɛ boli waati. O bɛ cogo min na a dafalen na, o filɛ nin ye:
export const surveySchema = { title: "Order Flow", showProgressBar: "sanfɛ", ɲɛw: [ { tɔgɔ: "details", elements: [ { suguya: "sɛbɛn", tɔgɔ: "Tɔgɔ fɔlɔ", isRequired: tiɲɛ }, { suguya: "sɛbɛn", tɔgɔ: "email", donType: "email", isRequired: tiɲɛ, validators: [{ suguya: "email", sɛbɛnni: "Email invalid" }] } ] }, { tɔgɔ: "order", elements: [ { type: "text", tɔgɔ: "sɔngɔ", donType: "jate", defaultValue: 0 }, { type: "text", tɔgɔ: "hakɛ", donType: "jate", defaultValue: 1 }, { type: "dropdown",tɔgɔ: "taxRate", defaultValue: 0.1, sugandiliw: [ { nafa: 0,05, sɛbɛnni: "5%" }, { nafa: 0,1, sɛbɛnni: "10%" }, { nafa: 0,15, sɛbɛnni: "15%" } ] }, { suguya: "fɔcogo", tɔgɔ: "subtotal", fɔcogo: "{sɔngɔ} {hakɛ}" }, { suguya: "fɔcogo", tɔgɔ: "takisi", kumasen: "{subtotal} {taxRate}" }, { suguya: "fɔcogo", tɔgɔ: "total", fɔcogo: "{subtotal} + {tax}" } ] }, { tɔgɔ: "jatebɔ", fɛnw: [ { suguya: "radiogroup", tɔgɔ: "hasAccount", sugandiliw: ["Ɔwɔ", "Ayi"] }, { suguya: "sɛbɛn", tɔgɔ: "username", visibleIf: "{hasAccount} = 'Yes'", isRequired: true }, { type: "text", tɔgɔ: "password", inputType: "password", visibleIf: "{hasAccount} = 'Ɔwɔ'", isRequired: tiɲɛ, validators: [{ type: "text", minLength: 6, text: "Min 6 characters" } ] }, { suguya: "jatebɔ", tɔgɔ: "wasa", hakɛMin: 1, hakɛMax: 5 }, { suguya: "kumasen", tɔgɔ: "Jaabi ɲuman", visibleIf: "{wasa} >= 4" }, { suguya: "kofɔli", tɔgɔ: "ɲɛnabɔli jaabi", visibleIf: "{wasa} <= 2" } ] }, { tɔgɔ: "seginkanni", visibleIf: "{total} >= 100", fɛnw: [] } ]};
Aw bɛ nin suma ni RHF ta ye waati dɔɔnin kɔnɔ.
superRefine bloki min tun bɛ baarakɛla tɔgɔ ni tɔgɔlasɛbɛn ɲini cogoya la, o tɛ yen tugun. visibleIf: "{hasAccount} = 'Yes'" faralen ɲɔgɔn kan ni isRequired ye: true bɛ haminanko fila bɛɛ ɲɛnabɔ ɲɔgɔn fɛ, foro yɛrɛ kan, i tun bɛna a jira ko i bɛna u sɔrɔ yɔrɔ min na. useWatch + useMemo cakɛda min ye jatebɔ kɛ subtotal, tax ani total, o bɛ bila a nɔ na ni fɔcogo foro saba ye minnu bɛ ɲɔgɔn tɔgɔ fɔ. Seginkanni ɲɛ cogoya, min tun bɛ RHF bɔko la, o tun bɛ se ka jɔ kokura dɔrɔn ni tugu-tugu-ɲɔgɔn kɔ showSubmit fɛ, n’o ye taamasiyɛn 3nan render bolofara ye. Wa a laban na, nav button logic ye visibleIf property kelen ye ɲɛ fɛn kan.
The same logic is there. O ye dɔrɔn ko schema (schema) bɛ sigiyɔrɔ di a ma a bɛ ye yɔrɔ min na a dan na, sanni a ka jɛnsɛn yɔrɔ bɛɛ la. Ani fana, a kɔlɔsi ko schema bɛ baara kɛ ni suguya ye: ‘expression’ ye subtotal, tax ani total ye. Fɔcogo ye kalan dɔrɔn de ye wa a bɛ Kɛ kɛrɛnkɛrɛnnenya la walasa ka jatebɔ nafaw jira. SurveyJS fana bɛ suguya dɛmɛ: ‘html’ kɔnɔkow jɔlen kama, nka jatebɔ nafaw kama, fɔcogo ye sugandili ɲuman ye. Sisan ka ɲɛsin React fan fɛ. Rendering Ani Submission A ka nɔgɔn kosɛbɛ. Wire onComplete ka taa i ka API la o cogo kelen na — useMutation fɛ walima plain fetch fɛ:
import { useState, useEffect, useRef } ka bɔ "react";import { useMutation } ka bɔ "@tanstack/react-query";import { Model } ka bɔ "survey-core";import { Survey } ka bɔ "survey-react-ui";import "survey-core/survey-core.css
export function Sɛgɛsɛgɛli sɛbɛn () { const [model] = useState (() => Model kura (sɛgɛsɛgɛliSchema));
const mutation = baarakɛcogoMutation({ mutationFn: async (daɲɛw) => { const res = jira fetch ("/api/cikanw", { fɛɛrɛ: "POST", headers: { "Kɔnɔkow-suguya": "application/json" }, farikolo: JSON.stringify (donnakow), . }); ni (!res.ok) throw new Error("A ma se ka ci"); segin res.json (); }, . });
const mutationRef = baarakɛcogoRef (mutation); mutationRef.current = fɛn falen-falen; useEffect(() => { const handler = (cibaga) => mutationRef.current.mutate(cibaga.data); model.onComplete.add(handler); return () => model.onComplete.remove(baarakɛla); }, [model]) // ref bɛ a yɛrɛ tanga handler sɛbɛnni seginni ma render bɛɛ la (mutation object identity changes) .
kɔsegin (
<>
{mutation.isError &&
Aw ye Pen SurveyJS-03-SurveyJS [forked] lajɛ ni sixthextinction ye.
onComplete fires ni baarakɛla sera ɲɛ laban yelen laban na. O la ni total ma tɛmɛ 100 kan abada ani ni seginnkanni ɲɛ in tɛmɛna, a bɛ tasuma don hali bi ka ɲɛ bawo SurveyJS bɛ yecogo jateminɛ ka sɔrɔ k’a latigɛ “ɲɛ laban” kɔrɔ ye min ye. O kɔfɛ, sender.data bɛ jaabi bɛɛ sɔrɔ ka fara jatebɔ nafaw kan (subtotal, tax, total) i n’a fɔ foro fɔlɔw, o la API nafalan bɛ tali kɛ RHF version ye min lajɛ bolo la onSubmit kɔnɔ. EmutationRef pattern ye kelen ye i bɛna se min na yɔrɔ o yɔrɔ i mago bɛ ko kɛlenw ɲɛnabɔbaga sabatilen na nafa dɔ kan min bɛ Changé render bɛɛ kan — foyi tɛ SurveyJS-kɛrɛnkɛrɛnnen na a ko la.
React yɔrɔ tɛ jagokɛcogo hakilina si sɔrɔ tugun fewu. UseWatch tɛ yen, JSX conditionnel tɛ yen, step counter tɛ yen, useMemo cakɛda tɛ yen, superRefine tɛ yen. React bɛ ka min kɛ a ka ɲi tiɲɛ na: ka yɔrɔ dɔ jira ani k’a siri API weleli la. Mun de Bɔra React la?
Jɔrɔnanko RHF Stack (RHF Stack) ye SɛgɛsɛgɛliJS Yeli yecogo JSX bolofara dɔw yelenNi Nafa minnu sɔrɔla, olu useWatch / baara kɛ ni Memo ye kuma fɔcogo Cross-field sariyaw superRefine (Sɛbɛnni) kɛ Skema cogoyaw Navigation (navigasiyɔn) (navigation). senna-tɛgɛrɛ cogoya Page visibleNi Sariya sigiyɔrɔ A bɛ tila-tila dosiyew kɔnɔ Cɛmancɛlen don schema kɔnɔ
Min bɛ To React kɔnɔ, o ye layout, styling, submission wiring, ani app integration ye, o kɔrɔ ye ko React dabɔra fɛn minnu kama tiɲɛ na. Fɛn tɔw bɛɛ jiginna schema kɔnɔ, wa ikomi schema ye JSON fɛn dɔrɔn de ye, a bɛ se ka mara database kɔnɔ, ka version (fɔcogo) kɛ a yɛrɛma i ka application code (application code) la, walima ka ladilan kɔnɔna baarakɛminɛnw fɛ k’a sɔrɔ a ma deployment (dadon) wajibiya. Fɛn dilanni ɲɛmɔgɔ min ka kan ka dakun caman Changer min bɛ seginnkanni ɲɛ daminɛ, o bɛ se k’o kɛ k’a sɔrɔ a ma maga o yɔrɔ la. O ye baarakɛcogo danfara kɔrɔ ye ekipuw bolo, yɔrɔ minnu na foroko kɛcogo bɛ wuli tuma caman na, wa a tɛ ɲɛminɛ tuma bɛɛ ɛntɛrinɛti injiniyɛriw fɛ. Tuma jumɛn na an ka kan ka baara kɛ ni fɛɛrɛ kelen-kelen bɛɛ ye? Nin ye sariya ɲuman ye min bɛ baara kɛ ne ye: i k’a miiri ko i bɛ sɛbɛnfura bɔ pewu. I tun bɛna bɔnɛ mun na?
If it’s screens, you want component-driven forms. N’a ye jagokɛcogo ye, i n’a fɔ dakunw, bolofara sariyaw, ani sarati wajibiyalenw minnu bɛ latigɛ lakikaw kofɔ, i b’a fɛ ka schema engine sɔrɔ.
O cogo kelen na, ni fɛn minnu bɛ na i ka sira kan, olu fanba bɛ tali kɛ labeliw, forow ani layidu la, RHF bɛna baara kɛ i ye koɲuman. N’u bɛ kuma cogoyaw, sɔrɔw, ani sariyaw kan, i ka ops walima sariya jɛkulu bɛ se ka minnu ladilan tarata wulada fɛ k’a sɔrɔ i ma tikiti di, schema model min bɛ SurveyJS fɛ, o de bɛ bɛn tiɲɛtigi ma kosɛbɛ. O fɛɛrɛ fla ninnu tɛ ɲɔgɔn Sɔrɔ tiɲɛ na. U bɛ gɛlɛya suguya wɛrɛw ɲɛnabɔ, wa fili min ka kan ka kɔlɔsi, o ye ka abstraction ni hakilina girinya bɛnbaliya ye — ka sariyasunba dɔ minɛ i n’a fɔ yɔrɔ dɔ bawo o de ye baarakɛminɛn dɔnta ye, walima ka se politiki motɛri dɔ ma bawo foroko dɔ bonyalen don ka se sen saba ma, ka foro saratilen dɔ sɔrɔ. An ye foroko min jɔ yan, o sigilen bɛ dan kɛrɛfɛ ni laɲini ye, a ka gɛlɛn fo ka se ka danfara bɔ kɛnɛ kan nka a tɛ dantɛmɛ fo ka se a dan na fo a bɛ kɛ i n’a fɔ a sumalen don. Foroko lakika fanba minnu kɛra fɛn ye min tɛ se ka minɛ i ka kodebase kɔnɔ, n’a sɔrɔla olu sigilen bɛ o dan kelen in kɛrɛfɛ, wa a ka c’a la, ɲininkali ye dɔrɔn ko mɔgɔ dɔ y’u tɔgɔ fɔ u ye min ye tiɲɛ na. Baara kɛ ni React Hook Form + Zod ye ni:
Sɛbɛnw bɛ tali kɛ CRUD la; Logic ye ‘fɛn ye min man dun ani a bɛ UI-driven (UI-driven) Kɛ; Ɛntɛrinɛti ɲɛmɔgɔw ye kɛwalew bɛɛ ta ye; Backend tora tiɲɛ sɔrɔyɔrɔ ye.
Baara kɛ ni SurveyJS ye ni:
Sɛbɛnw bɛ jago latigɛw kofɔ; Sariyaw bɛ wuli u yɛrɛma ka bɔ UI la; Logic ka kan ka ye, ka auditable, walima versioned; Mɔgɔ minnu tɛ ɛntɛrinɛti ye, olu bɛ nɔ bila kɛwalew la; O sɛbɛn kelen ka kan ka boli ɲɛfɛla caman kan.