$lang['tuto'] = "ట్యుటోరియల్స్"; ?>$lang['tuto'] = "ట్యుటోరియల్స్"; ?> టైప్‌స్క్రిప్ట్‌తో

టైప్‌స్క్రిప్ట్‌తో చర్యలో టైప్-సేఫ్ డ్రాప్‌డౌన్‌లు: రన్‌టైమ్ రిస్క్‌లను తొలగించడం

టైప్‌స్క్రిప్ట్‌తో చర్యలో టైప్-సేఫ్ డ్రాప్‌డౌన్‌లు: రన్‌టైమ్ రిస్క్‌లను తొలగించడం
టైప్‌స్క్రిప్ట్‌తో చర్యలో టైప్-సేఫ్ డ్రాప్‌డౌన్‌లు: రన్‌టైమ్ రిస్క్‌లను తొలగించడం

రియాక్ట్‌లో విశ్వసనీయ ఎంపిక జాబితాలను రూపొందించడం

రియాక్ట్ మరియు టైప్‌స్క్రిప్ట్‌లో ఫారమ్‌లతో పని చేస్తున్నప్పుడు, డేటా ఇన్‌పుట్‌ల యొక్క ఖచ్చితత్వాన్ని నిర్ధారించడం చాలా ముఖ్యమైనది. డ్రాప్‌డౌన్‌లు, లేదా ` వంటి ఫారమ్ మూలకాలలో విలువ మార్పులను నిర్వహించడానికి రియాక్ట్ ప్రాప్‌ను పేర్కొంటుంది. డ్రాప్‌డౌన్ విలువను స్థితికి లింక్ చేయడానికి ఇది ఉపయోగించబడుతుంది. includes() శ్రేణి నిర్దిష్ట మూలకాన్ని కలిగి ఉందో లేదో తనిఖీ చేసే జావాస్క్రిప్ట్ శ్రేణి పద్ధతి. ఎంపికల జాబితాలో డ్రాప్‌డౌన్ విలువ ఉందని ధృవీకరించడానికి ఉపయోగించబడుతుంది. key జాబితాలోని మూలకాలకు అవసరమైన రియాక్ట్ ప్రాప్. ఉదాహరణలో, ప్రతి ఎంపికకు ఒక ప్రత్యేక గుర్తింపు ఉందని నిర్ధారిస్తుంది. React.useState ఫంక్షనల్ కాంపోనెంట్‌లలో స్టేట్‌ని మేనేజ్ చేయడానికి రియాక్ట్ హుక్. డ్రాప్‌డౌన్‌లో ఎంచుకున్న కళాకారుడి విలువను ట్రాక్ చేయడానికి ఉపయోగించబడుతుంది. T | "" నిర్దిష్ట రకాన్ని (ఉదా., ఆర్టిస్ట్) లేదా ఖాళీ స్ట్రింగ్‌ని అనుమతించే టైప్‌స్క్రిప్ట్ యూనియన్ రకం. ఇది డిఫాల్ట్ విలువలను నిర్వహించడంలో సౌలభ్యాన్ని అనుమతిస్తుంది.

రియాక్ట్‌లో బిల్డింగ్ టైప్-సేఫ్ డ్రాప్‌డౌన్‌లు

పైన అందించిన స్క్రిప్ట్‌లు డ్రాప్‌డౌన్ జాబితా యొక్క బలమైన, టైప్-సురక్షిత అమలును సృష్టించడం లక్ష్యంగా పెట్టుకున్నాయి ప్రతిస్పందించండి ఉపయోగించి టైప్‌స్క్రిప్ట్. మొదటి పరిష్కారం `as const` కీవర్డ్‌ని ఉపయోగించడం ద్వారా టైప్‌స్క్రిప్ట్ అమలు చేయబడిన enum-వంటి నిర్మాణాన్ని ఉపయోగిస్తుంది. ఇది ఆర్టిస్ట్ పేర్ల శ్రేణిని లిటరల్ రకాలతో టుపుల్‌గా పరిగణించేలా నిర్ధారిస్తుంది. `కళాకారుడు` రకాన్ని ఈ అక్షరాల కలయికగా నిర్వచించడం ద్వారా, మేము కంపైల్ సమయంలో చెల్లని ఎంపికలను ప్రవేశపెట్టే అవకాశాన్ని తొలగిస్తాము. కఠినమైన రకం భద్రతను కొనసాగిస్తూ మరియు అనవసరమైన రన్‌టైమ్ తనిఖీలను నివారించేటప్పుడు ఈ విధానం కోడ్‌ను సులభతరం చేస్తుంది. 🎯

రెండవ స్క్రిప్ట్ కొంచెం భిన్నమైన విధానాన్ని తీసుకుంటుంది, రన్‌టైమ్‌లో ఎంచుకున్న విలువను `ఇన్‌క్లూడ్స్()` పద్ధతితో ధృవీకరించడంపై దృష్టి సారిస్తుంది. ఇది రన్‌టైమ్ చెక్‌ని పరిచయం చేస్తున్నప్పుడు, ముందే నిర్వచించబడిన జాబితా వెలుపల ఉన్న విలువను ఏదో ఒకవిధంగా పరిచయం చేస్తే అప్లికేషన్ క్రాష్ కాకుండా చూస్తుంది. బాహ్య డేటా లేదా డైనమిక్‌గా రూపొందించబడిన ఎంపికలు ప్రమేయం ఉన్న సందర్భాలలో ఈ పద్ధతి ఉపయోగపడుతుంది. అయినప్పటికీ, ఇది టైప్‌స్క్రిప్ట్ అందించే కొన్ని కంపైల్-టైమ్ హామీలను త్యాగం చేస్తుంది. ఫ్లెక్సిబిలిటీతో టైప్ సేఫ్టీని బ్యాలెన్సింగ్ చేయడానికి ఇది మంచి ఉదాహరణ. 🚀

మూడవ పరిష్కారం పునర్వినియోగ జెనరిక్ డ్రాప్‌డౌన్ కాంపోనెంట్‌ను పరిచయం చేస్తుంది. డ్రాప్‌డౌన్ ఎంపికలు మరియు విలువల రకం భద్రతను నిర్ధారించడానికి ఈ పద్ధతి టైప్‌స్క్రిప్ట్ జెనరిక్స్‌ను ప్రభావితం చేస్తుంది. సాధారణ పరిమితి (`T పొడిగింపు స్ట్రింగ్`)తో `DropdownProps` రకాన్ని నిర్వచించడం ద్వారా, కాంపోనెంట్ అత్యంత అనువైనదిగా మరియు వివిధ సందర్భాలలో పునర్వినియోగపరచదగినదిగా మారుతుంది. వివిధ రకాల డేటాతో డ్రాప్‌డౌన్‌లు అవసరమయ్యే భారీ-స్థాయి ప్రాజెక్ట్‌లకు ఈ విధానం అనువైనది. ఇది మాడ్యులర్ డిజైన్‌ను ప్రోత్సహిస్తుంది, కోడ్ డూప్లికేషన్‌ను తగ్గిస్తుంది మరియు నిర్వహణను మెరుగుపరుస్తుంది. సాధారణ డ్రాప్‌డౌన్ కాంపోనెంట్ స్కేలబుల్ మరియు రీయూజబుల్ రియాక్ట్ కాంపోనెంట్‌లను ప్రభావవంతంగా ఎలా వ్రాయాలో చూపుతుంది.

ప్రతి పరిష్కారం దాని ప్రత్యేక బలాలు మరియు ట్రేడ్-ఆఫ్‌లతో టైప్-సేఫ్ డ్రాప్‌డౌన్‌ల సమస్యను పరిష్కరిస్తుంది. కంపైల్-టైమ్ సేఫ్టీ పారామౌంట్ మరియు ఎంపికలు స్థిరంగా ఉన్న సందర్భాల్లో మొదటిది సరైనది. డైనమిక్ డేటా లేదా బాహ్య వనరులతో వ్యవహరించేటప్పుడు రెండవది ఉపయోగకరంగా ఉంటుంది. మూడవది పెద్ద ప్రాజెక్టుల కోసం దాని పునర్వినియోగం మరియు స్కేలబిలిటీలో ప్రకాశిస్తుంది. రియాక్ట్ స్టేట్ మేనేజ్‌మెంట్‌ని టైప్‌స్క్రిప్ట్ రకం సిస్టమ్‌తో కలపడం ద్వారా, ఈ స్క్రిప్ట్‌లు వెబ్ అభివృద్ధిలో సాధారణ ఆపదలకు ఆచరణాత్మక పరిష్కారాలను అందిస్తాయి. మీరు చిన్న యాప్ లేదా పెద్ద ప్రాజెక్ట్‌లో పని చేస్తున్నా, ఈ పద్ధతులు మీకు నమ్మకమైన మరియు నిర్వహించదగిన భాగాలను రూపొందించడంలో సహాయపడతాయి. 💡

టైప్ కాస్టింగ్ లేకుండా రియాక్ట్‌లో టైప్-సేఫ్ డ్రాప్‌డౌన్‌లను నిర్ధారించడం

ఈ పరిష్కారం ఫ్రంట్-ఎండ్ డెవలప్‌మెంట్ కోసం టైప్‌స్క్రిప్ట్‌తో రియాక్ట్‌ని ప్రభావితం చేస్తుంది, కంపైల్-టైమ్ భద్రత మరియు పునర్వినియోగతను నొక్కి చెబుతుంది.

// Solution 1: Using a TypeScript Enforced Enum
const allArtists = ["elvis", "dr dre"] as const;
type Artist = (typeof allArtists)[number];

function App() {
  const [artist, setArtist] = React.useState<Artist | "">("");

  function handleArtistChange(e: React.ChangeEvent<HTMLSelectElement>) {
    const newArtist = e.target.value as Artist | "";
    setArtist(newArtist);
  }

  return (
    <div>
      <select
        value={artist}
        onChange={handleArtistChange}
      >
        <option value="">Please choose</option>
        {allArtists.map((a) => (
          <option key={a} value={a}>{a}</option>
        ))}
      </select>
    </div>
  );
}

లిటరల్ రకాలను ఉపయోగించి మెరుగైన కంపైల్-టైమ్ సేఫ్టీ

ఈ విధానం రియాక్ట్ మరియు టైప్‌స్క్రిప్ట్‌తో గట్టిగా టైప్ చేయబడిన డ్రాప్‌డౌన్ కాంపోనెంట్‌ను సృష్టిస్తుంది, కంపైల్ సమయంలో చెల్లని ఎంపికలు ఫ్లాగ్ చేయబడిందని నిర్ధారిస్తుంది.

type Artist = "elvis" | "dr dre";
const allArtists: Artist[] = ["elvis", "dr dre"];

function App() {
  const [artist, setArtist] = React.useState<Artist | "">("");

  function handleArtistChange(e: React.ChangeEvent<HTMLSelectElement>) {
    const value = e.target.value;
    if (allArtists.includes(value as Artist) || value === "") {
      setArtist(value as Artist | "");
    }
  }

  return (
    <div>
      <select
        value={artist}
        onChange={handleArtistChange}
      >
        <option value="">Please choose</option>
        {allArtists.map((a) => (
          <option key={a} value={a}>{a}</option>
        ))}
      </select>
    </div>
  );
}

గరిష్ట సౌలభ్యం కోసం జెనరిక్ కాంపోనెంట్‌ని ఉపయోగించడం

ఈ పరిష్కారం రకం-సురక్షిత జాబితాలను నిర్వహించడానికి ఒక సాధారణ డ్రాప్‌డౌన్ భాగాన్ని పరిచయం చేస్తుంది, రియాక్ట్ ప్రాజెక్ట్‌లలో మెరుగైన మాడ్యులారిటీ మరియు పునర్వినియోగాన్ని అందిస్తుంది.

type DropdownProps<T extends string> = {
  options: T[];
  value: T | "";
  onChange: (value: T | "") => void;
};

function Dropdown<T extends string>({ options, value, onChange }: DropdownProps<T>) {
  return (
    <select value={value} onChange={(e) => onChange(e.target.value as T | "")}>
      <option value="">Please choose</option>
      {options.map((option) => (
        <option key={option} value={option}>{option}</option>
      ))}
    </select>
  );
}

// Usage
const allArtists = ["elvis", "dr dre"] as const;
type Artist = (typeof allArtists)[number];

function App() {
  const [artist, setArtist] = React.useState<Artist | "">("");

  return (
    <Dropdown
      options={allArtists}
      value={artist}
      onChange={setArtist}
    />
  );
}

రియాక్ట్‌లో డ్రాప్‌డౌన్‌ల కోసం కంపైల్-టైమ్ సేఫ్టీని నిర్ధారించడం

భద్రతను టైప్ చేయండి ప్రతిస్పందించండి చెల్లని ఇన్‌పుట్‌ల వల్ల ఏర్పడే బగ్‌లను నివారించడానికి డ్రాప్‌డౌన్‌లు కీలకం, ప్రత్యేకించి డేటా సమగ్రత ముఖ్యమైన అప్లికేషన్‌లలో. డ్రాప్‌డౌన్ అమలులో సాధారణంగా విస్మరించబడే అంశం ఏమిటంటే, డెవలప్‌మెంట్ మరియు రన్‌టైమ్ రెండింటిలోనూ ప్రతి ఐచ్ఛికం ముందే నిర్వచించబడిన రకంతో సమలేఖనం చేయబడుతుందని నిర్ధారిస్తుంది. `allArtists` వంటి శ్రేణులను ఉపయోగించడం సౌకర్యంగా ఉన్నప్పటికీ, ఎవరైనా అనుకోకుండా చెల్లని ఎంపికను జోడిస్తే సమస్యలు తలెత్తవచ్చు. దీనిని పరిష్కరించడానికి, `Enums` లేదా అధునాతన టైప్‌స్క్రిప్ట్ పద్ధతులు వంటి ప్రత్యామ్నాయ విధానాలు బలమైన హామీలను అందించగలవు. ఉదాహరణకు, టైప్‌స్క్రిప్ట్ యొక్క టైప్-చెకింగ్ సామర్థ్యాలతో సజావుగా పని చేసే అనుమతించదగిన విలువల యొక్క కఠినమైన సెట్‌ను అమలు చేయడంలో Enums సహాయపడతాయి. 🎯

డ్రాప్‌డౌన్ ఎంపికలను రూపొందించడానికి ఫ్యాక్టరీ ఫంక్షన్‌ను ఉపయోగించడం ద్వారా కంపైల్-టైమ్ భద్రతను నిర్ధారించడానికి మరొక వినూత్న మార్గం. ఈ ఫ్యాక్టరీ నమూనాతో జెనరిక్స్ యొక్క శక్తిని కలపడం ద్వారా, మీరు డ్రాప్‌డౌన్ జాబితాల సృష్టిని సంగ్రహించవచ్చు, టైప్-సురక్షిత ఎంపికలు మాత్రమే రూపొందించబడతాయని నిర్ధారిస్తుంది. మీ డ్రాప్‌డౌన్ విలువలు బ్యాకెండ్ API లేదా మరొక బాహ్య మూలం నుండి తీసుకోబడినప్పుడు ఈ పద్ధతి ప్రత్యేకంగా ఉపయోగపడుతుంది. డైనమిక్ దృష్టాంతాలలో `ఇన్క్లూడ్స్()` వంటి రన్‌టైమ్ ధ్రువీకరణలను జోడించడం ఇప్పటికీ అవసరం కావచ్చు, అయితే కంపైల్ సమయంలో టైప్‌స్క్రిప్ట్ భద్రతకు హామీ ఇచ్చే పూర్తిగా స్టాటిక్ డేటాసెట్‌లలో దీనిని నివారించాలి. 🚀

చివరగా, అభివృద్ధి అనుభవాన్ని మెరుగుపరిచే సాధనాలు మరియు ప్లగిన్‌లను అన్వేషించడాన్ని పరిగణించండి. టైప్‌స్క్రిప్ట్ నియమాలతో కూడిన ESLint వంటి సాధనాలు కోడ్ అమలు చేయబడే ముందు కూడా సంభావ్య సమస్యలను ముందుగానే గుర్తించగలవు. అదనంగా, డ్రాప్‌డౌన్ లాజిక్ ఆశించిన విధంగా ప్రవర్తిస్తుందని నిర్ధారించుకోవడానికి మీరు Jest వంటి ఫ్రేమ్‌వర్క్‌లను ఉపయోగించి యూనిట్ పరీక్షలను వ్రాయవచ్చు. కంపైల్-టైమ్ మరియు రన్‌టైమ్ వ్యూహాలను కలపడం ద్వారా, డెవలపర్‌లు సురక్షితమైన మరియు నిర్వహించదగిన బలమైన భాగాలను సృష్టించగలరు. 💡

రియాక్ట్‌లో టైప్-సేఫ్ డ్రాప్‌డౌన్‌ల గురించి తరచుగా అడిగే ప్రశ్నలు

  1. రియాక్ట్‌లో టైప్-సేఫ్ డ్రాప్‌డౌన్‌ల యొక్క ముఖ్య ఉద్దేశ్యం ఏమిటి?
  2. చెల్లని విలువలను ఎంపిక చేయకుండా నిరోధించడం, అన్ని ఎంపికలు ముందే నిర్వచించిన వాటితో సరిపోలడం ప్రధాన ఉద్దేశ్యం TypeScript రకం.
  3. నా డ్రాప్‌డౌన్ ముందే నిర్వచించిన విలువలను మాత్రమే అంగీకరిస్తుందని నేను ఎలా నిర్ధారించగలను?
  4. ఉపయోగించండి as const టుపుల్‌ని సృష్టించడానికి కీవర్డ్, ఆపై ఉపయోగించే టుపుల్ విలువల నుండి యూనియన్ రకాన్ని నిర్వచించండి (typeof array)[number].
  5. నా డ్రాప్‌డౌన్ ఎంపికలు API నుండి పొందినట్లయితే ఏమి చేయాలి?
  6. మీరు రన్‌టైమ్‌లో API ప్రతిస్పందనలను ధృవీకరించవచ్చు మరియు వాటిని aకి మ్యాప్ చేయవచ్చు type-safe డైనమిక్ డేటాతో పని చేస్తున్నప్పుడు భద్రతను నిర్వహించడానికి నిర్మాణం.
  7. డ్రాప్‌డౌన్ విలువల కోసం Enums లేదా Tuplesని ఉపయోగించడం మంచిదా?
  8. ఎనమ్స్ రీడబిలిటీ మరియు కంపైల్-టైమ్ సేఫ్టీకి గొప్పగా ఉంటాయి కానీ వెర్బోసిటీని పెంచవచ్చు. టుపుల్స్ మరింత సంక్షిప్తంగా మరియు బాగా సరిపోతాయి as const.
  9. నేను బహుళ రకాల డేటా కోసం డ్రాప్‌డౌన్ కాంపోనెంట్‌ని మళ్లీ ఉపయోగించవచ్చా?
  10. అవును! రకం పరిమితితో కూడిన సాధారణ భాగాన్ని ఉపయోగించండి T extends string, వివిధ డ్రాప్‌డౌన్ డేటాసెట్‌లను నిర్వహించడానికి.
  11. డ్రాప్‌డౌన్ విలువలతో రన్‌టైమ్ లోపాలను నేను ఎలా నిర్వహించగలను?
  12. వంటి రన్‌టైమ్ తనిఖీలతో కంపైల్-టైమ్ రకం భద్రతను కలపండి Array.includes() డైనమిక్‌గా పొందిన విలువలను ధృవీకరించడానికి.
  13. టైప్‌స్క్రిప్ట్ డైనమిక్‌గా రూపొందించబడిన డ్రాప్‌డౌన్ ఎంపికలలో లోపాలను గుర్తించగలదా?
  14. నేరుగా కాదు. డైనమిక్‌గా రూపొందించబడిన ఎంపికల కోసం మీకు రన్‌టైమ్ తనిఖీలు మరియు API ప్రతిస్పందనలను మ్యాప్ చేసేటప్పుడు సరైన ధ్రువీకరణ అవసరం.
  15. డ్రాప్‌డౌన్ భాగాలను పరీక్షించడానికి ఉత్తమ సాధనాలు ఏమిటి?
  16. డ్రాప్‌డౌన్ ప్రవర్తనను ధృవీకరించే యూనిట్ పరీక్షలను వ్రాయడానికి జెస్ట్ మరియు రియాక్ట్ టెస్టింగ్ లైబ్రరీ అద్భుతమైనవి.
  17. సాధారణ డ్రాప్‌డౌన్ భాగం ఎలా పని చేస్తుంది?
  18. ఇది సాధారణ రకం పరామితిని తీసుకుంటుంది, ఎంపికలు మరియు ఎంపిక కోసం ఆ రకం విలువలు మాత్రమే ఉపయోగించబడుతున్నాయని నిర్ధారిస్తుంది.
  19. ఎందుకు ఉంది React.ChangeEvent ఈవెంట్ హ్యాండ్లర్‌లో ఉపయోగించారా?
  20. ఫారమ్ మూలకాల నుండి ఈవెంట్‌లను నిర్వహించడానికి ఇది టైప్-సురక్షిత మార్గాన్ని అందిస్తుంది, సరైన టైపింగ్‌ను నిర్ధారిస్తుంది e.target.value.
  21. టైప్-సేఫ్ డ్రాప్‌డౌన్‌ల యొక్క కొన్ని నిజ జీవిత ఉదాహరణలు ఏమిటి?
  22. "USA" మరియు "కెనడా" వంటి ఎంపికలు ముందే నిర్వచించబడిన దేశ ఎంపిక సాధనాన్ని పరిగణించండి. టైప్-సేఫ్ డ్రాప్‌డౌన్‌లు "మార్స్" వంటి చెల్లని ఎంట్రీలను నిరోధిస్తాయి. 🌍

విశ్వసనీయ ఎంపిక జాబితాలను రూపొందించడం

చెల్లని విలువల వల్ల ఏర్పడే బగ్‌లను నివారించడానికి రియాక్ట్‌లో టైప్-సురక్షిత ఎంపిక జాబితాలు అవసరం. టైప్‌స్క్రిప్ట్ యొక్క స్టాటిక్ అనాలిసిస్ సామర్థ్యాలను ఉపయోగించి, డెవలపర్‌లు డ్రాప్‌డౌన్ ఎంపికల కోసం ఖచ్చితమైన విలువ రకాలను అమలు చేయడం ద్వారా రన్‌టైమ్ క్రాష్‌లను నివారించవచ్చు. ఇది కోడ్ నాణ్యత మరియు నిర్వహణ రెండింటినీ పెంచుతుంది. 🚀

జెనరిక్స్, పునర్వినియోగ భాగాలు మరియు కంపైల్-టైమ్ సేఫ్టీ చెక్‌ల వంటి విధానాలతో, మీరు ఏదైనా వినియోగ సందర్భం కోసం సమర్థవంతమైన డ్రాప్‌డౌన్‌లను సృష్టించవచ్చు. జెస్ట్ వంటి పరీక్షా సాధనాలతో ఈ సాంకేతికతలను కలపడం విశ్వసనీయ పనితీరును మరింత నిర్ధారిస్తుంది. రకం భద్రతకు ప్రాధాన్యత ఇవ్వడం ద్వారా, మీరు వినియోగదారులు మరియు డెవలపర్‌లు ఇద్దరికీ మెరుగైన అనుభవాన్ని అందిస్తారు. 💡

టైప్-సేఫ్ డ్రాప్‌డౌన్‌ల కోసం సూచనలు మరియు వనరులు
  1. టైప్‌స్క్రిప్ట్‌ని ఉపయోగించి రియాక్ట్‌లో స్థితిని నిర్వహించడం గురించిన వివరాలు అధికారిక రియాక్ట్ డాక్యుమెంటేషన్ నుండి తీసుకోబడ్డాయి: రియాక్ట్ డాక్స్ .
  2. టైప్‌స్క్రిప్ట్‌తో టైప్-సేఫ్ ప్రోగ్రామింగ్ కోసం ఉత్తమ పద్ధతులు టైప్‌స్క్రిప్ట్ హ్యాండ్‌బుక్ నుండి సూచించబడ్డాయి: టైప్‌స్క్రిప్ట్ డాక్స్ .
  3. డైనమిక్ మరియు పునర్వినియోగ డ్రాప్‌డౌన్ భాగాలను సృష్టించే ఉదాహరణలు dev.toలోని కథనాల ద్వారా ప్రేరణ పొందాయి: దేవ్.టు .
  4. ఎర్రర్ హ్యాండ్లింగ్ మరియు రన్‌టైమ్ ధ్రువీకరణకు సంబంధించిన అంతర్దృష్టులు కెంట్ సి. డాడ్స్ ట్యుటోరియల్ నుండి వచ్చాయి: కెంట్ సి. డాడ్స్ బ్లాగ్ .
  5. రియాక్ట్ కాంపోనెంట్‌ల కోసం టెస్టింగ్ టూల్స్ మరియు పద్ధతులు జెస్ట్ అధికారిక సైట్ నుండి సమీక్షించబడ్డాయి: జెస్ట్ డాక్స్ .