uz
Feedback
ToCode

ToCode

Kanalga Telegramโ€™da oโ€˜tish

ื˜ื™ืคื™ื ืงืฆืจื™ื ืœืžืชื›ื ืชื™ื ืžืืช ื™ื ื•ืŸ ืคืจืง

Ko'proq ko'rsatish
1 420
Obunachilar
Ma'lumot yo'q24 soatlar
+27 kunlar
-230 kunlar
Postlar arxiv
ToCode
1 420
promise.status = 'rejected';
        promise.reason = reason;
      },
    );
    throw promise;
  }
}
ื”ืคื•ื ืงืฆื™ื” ืžืงื‘ืœืช Promise ื•ืžืฉืชืžืฉืช ื‘ throw ื›ื“ื™ ืœื‘ืจื•ื— ืžื”ืคื•ื ืงืฆื™ื” ืฉืงืจืื” ืœื” ืื ื” Promise ืขื“ื™ื™ืŸ ืœื ืžื•ื›ื ื”. ืงื•ืžืคื•ื ื ื˜ืช Suspense ืชืชืคื•ืก ืืช ื” Promise ื•ืชืฆื™ื’ ืืช ื” Fallback Content, ื•ืื•ื˜ื•ืžื˜ื™ืช ื›ืฉื” Promise ื™ืกืชื™ื™ื ืชืจื ื“ืจ ืžื—ื“ืฉ ืืช ื”ืงื•ืžืคื•ื ื ื˜ื” ื”ืคื ื™ืžื™ืช. ื”ื—ืœืง ื”ืื—ืจื•ืŸ ื‘ื“ื•ื’ืžื” ื”ื•ื ื”ืคื•ื ืงืฆื™ื” fetchData. ืื—ืกื•ืš ืœื›ื ืืช ื”ืžื™ืžื•ืฉ ื›ื™ ื”ื•ื ืœื ื—ืฉื•ื‘, ื–ืืช ืคืฉื•ื˜ ืคื•ื ืงืฆื™ื” ืืกื™ื ื›ืจื•ื ื™ืช ืฉืžืงื‘ืœืช ืžื™ื“ืข ืžื”ืฉืจืช. ## ืžืคืœ ื‘ืงืฉื•ืช ืืกืคืงื˜ ื ื•ืกืฃ ืฉืœ Suspense ืฉืงืฆืช ืขื•ื‘ืจ ืžืชื—ืช ืœืจื“ืืจ ื”ื•ื ื”ื™ื—ืก ืœื‘ืขื™ื” ืฉื ืงืจืืช ืžืคืœ ื‘ืงืฉื•ืช. ื”ื‘ืขื™ื” ื‘ื’ื“ื•ืœ ืขืฉื•ื™ื” ืœื”ื™ื’ืจื ื›ืฉื™ืฉ ืœื ื• ืงื•ืžืคื•ื ื ื˜ื•ืช ืžืงื•ื ื ื•ืช ืฉื›ืœ ืื—ืช ืžื”ืŸ ืฆืจื™ื›ื” ืœืงื‘ืœ ืžื™ื“ืข ืื—ืจ ืžื”ืฉืจืช. ื ื“ืžื™ื™ืŸ ืžืฉื”ื• ื‘ืกื’ื ื•ืŸ: 1. ืงื•ืžืคื•ื ื ื˜ื” ืฉืœ ื˜ื•ืคืก ื”ื—ืœืคืช ืกื™ืกืžื” ื‘ืžืกืš "ื”ื—ืฉื‘ื•ืŸ ืฉืœื™", ืฉื‘ืฉื‘ื™ืœ ืœื”ื™ื˜ืขืŸ ืฆืจื™ื›ื” ืœืงื‘ืœ ืžื”ืฉืจืช ืืช ืคืจื˜ื™ ื”ืžืฉืชืžืฉ ื”ื ื•ื›ื—ื™. 2. ื‘ืชื•ื›ื” ืงื•ืžืคื•ื ื ื˜ื” ืฉืœ Captcha ืฉืฆืจื™ื›ื” ืœืงื‘ืœ ืžืฉืจืช ืื—ืจ ืืช ื”ืฆื™ื•ืจ ืฉืœ ื”ืื•ืชื™ื•ืช ื”ืžื•ื–ืจื•ืช ื›ื“ื™ ืœื•ื•ื“ื ืฉื”ืžืฉืชืžืฉ ืื›ืŸ ื‘ืŸ ืื“ื. ื‘ืžืฆื‘ ืจื’ื™ืœ ืฉืœ ืงื•ืžืคื•ื ื ื˜ื” ื‘ืชื•ืš ืงื•ืžืคื•ื ื ื˜ื”, ืจืง ืื—ืจื™ ืฉืงื•ื ืคื•ื ื ื˜ืช ื”ื˜ื•ืคืก ืชืกื™ื™ื ืœื˜ืขื•ืŸ ื•ืœื”ืชืจื ื“ืจ ืขืœ ื”ืžืกืš ืืคืฉืจ ื™ื”ื™ื” ืœื”ืžืฉื™ืš ืœืžืฉื•ืš ืืช ื”ืžื™ื“ืข ืžืงื•ืžืคื•ื ื ื˜ืช ื” Captcha. ื‘ื—ืœืง ืžื“ืคื™ ื”ืชื™ืขื•ื“ ืขืœ Suspense ื”ื ืžื“ื‘ืจื™ื ืขืœ ื”ื‘ืขื™ื” ื”ื–ื•, ื‘ืื—ืจื™ื ืœื. ื ืฉื™ื ืœื‘ ืฉืฉื™ืžื•ืฉ ื ืื™ื‘ื™ ื‘ Suspense ืœื ื™ืคืชื•ืจ ืืช ื‘ืขื™ื™ืช ื”ืžืคืœ ื›ื™ ื” throw ืฉื™ืขืฆื•ืจ ืืช ื”ืจื™ื ื“ื•ืจ ืฉืœ ืงื•ืžืคื•ื ื ื˜ืช ื”ื˜ื•ืคืก ื™ืžื ืข ืจื™ื ื“ื•ืจ ืฉืœ ืงื•ืžืคื•ื ื ื˜ืช ื” Captcha ื”ืคื ื™ืžื™ืช ื™ื•ืชืจ. ื›ืŸ ืืคืฉืจ ืœืืจื’ืŸ ืื—ืจืช ืืช ืขืฅ ื”ืงื•ืžืคื•ื ื ื˜ื•ืช ื•ืœืžืฉื•ืš ืืช ื”ืžื™ื“ืข ื‘ืงื•ืžืคื•ื ื ื˜ื” ื‘ืจืžื” ื’ื‘ื•ื”ื” ื™ื•ืชืจ ืื• ืžืชื•ืš ืกืคืจื™ื™ืช ื ื™ื”ื•ืœ ื”ืกื˜ื™ื™ื˜ ื›ื“ื™ ืœืฆืืช ืžื–ื”, ืื‘ืœ ื‘ื›ืœ ืžืงืจื” Suspense ื™ื”ื™ื” ืจืง ื—ืœืง ืงื˜ืŸ ืžื”ืคื™ืชืจื•ืŸ ื›ืืŸ. ## ืžื” ืืคืฉืจ ืœืขืฉื•ืช ื‘ืžืงื•ื Suspense? ืื ื ืกื›ื ื”ื™ืชืจื•ืŸ ื”ื’ื“ื•ืœ ืฉืœ Suspense ื”ื•ื ื‘ื™ื›ื•ืœืช ืœื˜ืคืœ ื‘ืžืกืคืจ ืงื•ืžืคื•ื ื ื˜ื•ืช ืฉื˜ื•ืขื ื•ืช ืžื™ื“ืข ื•ืœื”ืฆื™ื’ ืงื•ืžืคื•ื ื ื˜ืช Loading ืžืกื•ื“ืจืช ืื—ืช ืฉืžืจื›ื–ืช ืืช ื›ืœ ื”ื˜ืขื™ื ื•ืช. ืœืคื ื™ Suspense ื”ืคื™ืชืจื•ืŸ ื”ื˜ื•ื‘ ื‘ื™ื•ืชืจ ืœืžืฆื‘ ื”ื–ื” ื”ื•ื ืœื‘ืฆืข ืืช ื›ืœ ื”ื˜ืขื™ื ื•ืช ืžื”ืงื•ืžืคื•ื ื ื˜ื” ื”ืจืืฉื™ืช ื•ืœื”ืขื‘ื™ืจ ืืช ื”ืžื™ื“ืข ืฉื ื˜ืขืŸ ืœื™ืœื“ื™ื ื›ืฉื”ื•ื ืžื•ื›ืŸ, ืžืฉื”ื• ื‘ืกื’ื ื•ืŸ ื”ื–ื”:
export default function ArtistPage({ artist }) {
  const { data, isLoading } = useSWR(`/${artist.id}/albums`);
  return (
    <>
      <h1>{artist.name}</h1>
      {isLoading ? <Loading /> : <Albums data={albums} />}
    </>
  );
}
ื”ื™ืชืจื•ืŸ ื‘ื’ื™ืฉื” ื›ื–ืืช ื”ื•ื ืฉืื ื—ื ื• ืžืงื‘ืœื™ื ืื•ื˜ื•ืžื˜ื™ืช ื”ืคืจื“ื” ื‘ื™ืŸ ื”ืงื•ืžืคื•ื ื ื˜ื•ืช ืฉืœ ื”ืœื•ื’ื™ืงื” (ืืœื” ืฉืฉื•ืœื—ื•ืช ื‘ืงืฉื•ืช ืจืฉืช) ืœืงื•ืžืคื•ื ื ื˜ื•ืช ืคืฉื•ื˜ื•ืช ื™ื•ืชืจ ืฉืœ ืชืฆื•ื’ื” ืฉื ืžืฆืื•ืช ื‘ืชื•ื›ืŸ. ื”ื—ื™ืกืจื•ืŸ ื”ื•ื ืฉื”ื›ืชื™ื‘ื” ืžืื•ื“ ืจื™ื›ื•ื–ื™ืช ื•ื–ื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžื‘ืœื‘ืœ ื›ืฉืฆืจื™ืš ืœืฉื ื•ืช ื ืชื™ื‘ื™ื ืื• ื›ืฉื™ืฉ ืœื•ื’ื™ืงื” ื™ื•ืชืจ ืžืฉืžืขื•ืชื™ืช ืกื‘ื™ื‘ ื”ื‘ืงืฉื”, ืœื“ื•ื’ืžื” ืื Albums ืฆืจื™ืš ืœืงื—ืช ืืช ื”ืžื™ื“ืข ืฉืžื’ื™ืข ืžื”ืฉืจืช ื•ืœืขืฉื•ืช ืขืœื™ื• ืื™ื–ื•ืฉื”ื™ ืžื ื™ืคื•ืœืฆื™ื” ืœืคื ื™ ืฉื™ื›ื•ืœ ืœื”ืฆื™ื’ ืื•ืชื•. ## ืื– ืœืฉื›ืชื‘? ืžืฆื“ ืื—ื“ ืœ Suspense ื™ืฉ ืงืœืฃ ืžื ืฆื— ื‘ืฉืจื•ื•ืœ - ื”ื•ื ื‘ืืžืช ืžืืคืฉืจ ื”ืจื‘ื” ื™ื•ืชืจ ื‘ืงืœื•ืช ืœื‘ื ื•ืช ื“ืฃ ืฉืžื•ืจื›ื‘ ืžื”ืจื‘ื” ืงื•ืžืคื•ื ื ื˜ื•ืช, ืฉื›ืœ ืื—ืช ืžื”ืŸ ืžื•ืฉื›ืช ืžื™ื“ืข ืžื”ืฉืจืช ื•ื›ื•ืœืŸ ื™ื—ื“ ืžืฆื™ื’ื•ืช ืžืกืš ื˜ืขื™ื ื” ืื—ื“. ืžืฆื“ ืฉื ื™ ื” Use Case ื”ื–ื” ื”ืจื‘ื” ืคื—ื•ืช ื ืคื•ืฅ ืžืžื” ืฉืžื“ืžื™ื™ื ื™ื. ื‘ื”ืจื‘ื” ืžืขืจื›ื•ืช ื™ืฉ ืœื™ ื ืชื™ื‘ ืื—ื“ ื‘ืฉืจืช ืฉืžื—ื–ื™ืจ ืืช ื›ืœ ื”ืžื™ื“ืข ืฉืœ "ื“ืฃ" ืžืกื•ื™ื, ื•ืื– ืื ื™ ืžืฉืชืžืฉ ื‘ useSWR (ืื• ืžืงื‘ื™ืœื•ืช ืฉืœื•) ืจืง ื‘ืงื•ืžืคื•ื ื ื˜ื” ื”ืจืืฉื™ืช ืฉืœ ื”ื“ืฃ ื•ืžืคื–ืจ ืืช ื”ืžื™ื“ืข ืฉืงื™ื‘ืœืชื™ ื‘ื™ืŸ ื”ืงื•ืžืคื•ื ื ื˜ื•ืช. ื‘ืขื•ื“ ื”ืจื‘ื” ืžืขืจื›ื•ืช ื›ืŸ ื™ื”ื™ื• ืœื™ ืงื•ืžืคื•ื ื ื˜ื•ืช ืงื˜ื ื•ืช ืฉื˜ื•ืขื ื•ืช ืืช ืขืฆืžืŸ, ืื‘ืœ ื›ืฉื›ืœ ืงื•ืžืคื•ื ื ื˜ื” ื™ื•ื“ืขืช ืœื”ืฆื™ื’ ืืช ืขืฆืžื” ื’ื ื‘ืžืฆื‘ "ื˜ืขื™ื ื”", ืœืžืฉืœ ื‘ืžืขืจื›ืช ืฉืžืฆื™ื’ื” ืขืœ ื”ืžืกืš ื›ืžื” ื’ืจืคื™ื, ืื– ื”ื’ื™ื•ื ื™ ืœืจืื•ืช ืืช ื”ื’ืจืคื™ื ื ื˜ืขื ื™ื ื‘ืฆื•ืจื” ืขืฆืžืื™ืช ืื—ื“ ืื—ืจื™ ื”ืฉื ื™. ืื– ื›ืŸ ื›ื“ืื™ ืœื”ื›ื™ืจ ืืช Suspense, ื›ื“ืื™ ืœื”ืฉืชืžืฉ ื‘ื• ื›ืฉืฆืจื™ืš, ืื‘ืœ ืืœ ืชืขืฆืจื• ืขื›ืฉื™ื• ื”ื›ืœ ื‘ืฉื‘ื™ืœ ืœืฉื›ืชื‘ ืืช ื›ืœ ืงื•ื“ ื”ืชืงืฉื•ืจืช ืฉืœื›ื ืขื Suspense. ื‘ืจื•ื‘ ื”ืžืขืจื›ื•ืช ืืคืฉืจ ืœื”ืกืชื“ืจ ื˜ื•ื‘ ืžืื•ื“ ื’ื ื‘ืœืขื“ื™ื•.

ToCode
1 420
# ืจื™ืืงื˜ ืžืชื™ Suspense ืฉื•ื•ื” ืืช ื”ืžืืžืฅ ืื—ื“ ื”ืคื™ืฆ'ืจื™ื ืฉืขื•ืจืจื• ื”ืชืœื”ื‘ื•ืช ื‘ืจื™ืืงื˜ 18 ื ืงืจื Suspense For Data Fetching. ื‘ืคื•ืกื˜ ื–ื” ื ืจืื” ืžื”ื• Suspense For Data Fetching ื•ืžืชื™ ื›ื“ืื™ ืื• ืœื ื›ื“ืื™ ืœื”ืฉืชืžืฉ ื‘ื•. ## ื”ืฆื•ืจืš ื‘ Suspense ืœืคื ื™ Suspense, ื›ืฉืจืฆื™ื ื• (ืื• ืขื“ื™ื™ืŸ ืจื•ืฆื™ื) ืœื”ืฆื™ื’ ืงื•ืžืคื•ื ื ื˜ื” ืฉืชืœื•ื™ื” ื‘ืžื™ื“ืข ืฉืžื’ื™ืข ืžื”ืฉืจืช ื”ื™ื• ืœื ื• ืฉืชื™ ืืคืฉืจื•ื™ื•ืช: 1. ื”ื™ื™ื ื• ื™ื›ื•ืœื™ื ื‘ืงื•ืžืคื•ื ื ื˜ื” ืฉืžืขืœื™ื” ืœืžืฉื•ืš ืืช ื”ืžื™ื“ืข, ื•ืœื”ืฆื™ื’ ืืช ื”ืงื•ืžืคื•ื ื ื˜ื” ืจืง ืื—ืจื™ ืฉื”ืžื™ื“ืข ืžื•ื›ืŸ. 2. ื”ื™ื™ื ื• ื™ื›ื•ืœื™ื ื‘ืชื•ืš ื”ืงื•ืžืคื•ื ื ื˜ื” ืœื›ืชื•ื‘ ืงื•ื“ ืฉื™ืžืฉื•ืš ืืช ื”ืžื™ื“ืข, ื•ืœืฉื™ื ืœื‘ ืœื˜ืคืœ ืชืžื™ื“ ื’ื ื‘ืžืฆื‘ ืœืคื ื™ ืฉื”ืžื™ื“ืข ืžื•ื›ืŸ. ื‘ื“ื•ื’ืžื” ืคืฉื•ื˜ื” ืž swr, ื”ืงื•ืžืคื•ื ื ื˜ื” ื”ื‘ืื” ืžื•ืฉื›ืช ืžื™ื“ืข ืขืœ ืžืฉืชืžืฉ:
import useSWR from 'swr'

function Profile() {
  const { data, error, isLoading } = useSWR('/api/user', fetcher)

  if (error) return <div>failed to load</div>
  if (isLoading) return <div>loading...</div>
  return <div>hello {data.name}!</div>
}
ื”ืงื•ืžืคื•ื ื ื˜ื” ืื—ืจืื™ืช ืœื™ื™ืฆืจ 3 ื™ื™ืฆื•ื’ื™ื - ืื ื”ื‘ืงืฉื” ื ื›ืฉืœื” ื”ื™ื ืžื—ื–ื™ืจื” ืืช ื”ื˜ืงืกื˜ failed to load, ืื ื”ื‘ืงืฉื” ื”ืฆืœื™ื—ื” ื”ื™ื ืžื—ื–ื™ืจื” ืืช ืฉื ื”ืžืฉืชืžืฉ ื•ืื ื”ื‘ืงืฉื” ื‘ื˜ืขื™ื ื” ื”ื™ื ืžื—ื–ื™ืจื” ืืช ื”ื˜ืงืกื˜ loading. ื™ืฉ ืงื•ืžืคื•ื ื ื˜ื•ืช ืฉืžืื•ื“ ื”ื’ื™ื•ื ื™ ืœื‘ื ื•ืช ืขื‘ื•ืจืŸ "ืžืฆื‘ ื˜ืขื™ื ื”". ื—ื™ืฉื‘ื• ืขืœ ืงื•ืžืคื•ื ื ื˜ื” ืฉืœ ืชื™ื‘ืช ื‘ื—ื™ืจื” ืฉื‘ื” ื”ืืคืฉืจื•ื™ื•ืช ื”ืฉื•ื ื•ืช ืœื‘ื—ื™ืจื” ื ื˜ืขื ื•ืช ืžืžื™ื“ืข ืฉืžื’ื™ืข ืžื”ืฉืจืช. ื‘ืžืฆื‘ ื›ื–ื” ืื™ืŸ ื‘ืขื™ื” ืœืฆื™ื™ืจ Spinner ืงื˜ืŸ ื‘ืชื•ืš ื”ืชื™ื‘ื” ื›ืฉื”ืืคืฉืจื•ื™ื•ืช ื ื˜ืขื ื•ืช ื›ื“ื™ ืœืฉืงืฃ ืœืžืฉืชืžืฉ ืฉืชื›ืฃ ืืคืฉืจ ื™ื”ื™ื” ืœื‘ื—ื•ืจ ืืคืฉืจื•ืช. ืื‘ืœ ื™ืฉ ืžืฆื‘ื™ื ื™ื•ืชืจ ืžืกื•ื‘ื›ื™ื, ืœืžืฉืœ ื ื—ืฉื•ื‘ ืขืœ ืงื•ืžืคื•ื ื ื˜ื” ืฉืœ "ื“ืฃ ื—ืฉื‘ื•ืŸ" ืฉื›ื•ืœืœืช ืžื™ื“ืข ืขืœ ื”ื—ืฉื‘ื•ืŸ ืฉืžื’ื™ืข ืžื›ืžื” ื ืงื•ื“ื•ืช ืงืฆื” ื•ื‘ื›ืžื” ืงื•ืžืคื•ื ื ื˜ื•ืช. ืœื“ื•ื’ืžื” ืืคืฉืจ ืœื“ืžื™ื™ืŸ ื“ืฃ ื‘ืืชืจ ืงื•ืจืกื™ื ืฉื™ื”ื™ื” ืžื•ืจื›ื‘ ืžื›ืžื” ืงื•ืžืคื•ื ื ื˜ื•ืช: 1. ืงื•ืžืคื•ื ื ื˜ื” ืฉืœ ืชืขื•ื“ื•ืช ืฉืžืฆื™ื’ื” ืจืฉื™ืžื” ืฉืœ ื›ืœ ื”ืงื•ืจืกื™ื ืฉืกื™ื™ืžืชื . 2. ืงื•ืžืคื•ื ื ื˜ื” ืฉืœ ืคืจื˜ื™ ื›ื ื™ืกื” ืฉืžืฆื™ื’ื” ืืช ื”ืื™ืžื™ื™ืœ ืฉืœ ื”ืžืฉืชืžืฉ ืขื ืืคืฉืจื•ืช ืœื”ื—ืœื™ืฃ ืžื™ื™ืœ ืื• ืกื™ืกืžื”. 3. ืงื•ืžืคื•ื ื ื˜ื” ืฉืœ ืคืจื˜ื™ ืชืฉืœื•ื ืฉืžืฆื™ื’ื” ืืช ืคืจื˜ื™ ื”ืชืฉืœื•ืžื™ื ืฉื‘ื•ืฆืขื• ืขื ืืคืฉืจื•ืช ืœื”ื•ืจื™ื“ ื—ืฉื‘ื•ื ื™ื•ืช ื™ืฉื ื•ืช ืื• ืœืฉื ื•ืช ืคืจื˜ื™ ืืฉืจืื™. ื‘ืžืฆื‘ ื›ื–ื” ื›ืœ ืงื•ืžืคื•ื ื ื˜ื” ืชืฆื˜ืจืš ืœืžืฉื•ืš ืืช ื”ืžื™ื“ืข ืฉืจืœื•ื•ื ื˜ื™ ืขื‘ื•ืจื”. ืื ื›ืœ ืงื•ืžืคื•ื ื ื˜ื” ืชืฆื™ื’ ื”ื•ื“ืขืช "ื”ืžื™ื“ืข ื‘ื˜ืขื™ื ื”" ื™ื”ื™ื” ืœื ื• ื“ืฃ ืฉืžื•ืจื›ื‘ ืžื›ืžื” Spinner-ื™ื ืฉืื•ืœื™ ืœื ืžืชื•ืืžื™ื ื‘ื™ื ื™ื”ื. ## ืื™ืš Suspense ืขื•ื‘ื“ ืื ื™ ืžืชื‘ืกืก ืขืœ ื”ื“ื•ื’ืžื” ืžื”ืชื™ืขื•ื“ ืฉื–ืžื™ื ื” ื‘ืงื•ื“ืกื ื“ื‘ื•ืงืก ื”ื–ื”: https://codesandbox.io/s/s9zlw3 ื‘ืฉื‘ื™ืœ ืœื”ืฉืชืžืฉ ื‘ Suspense ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื›ืชื•ื‘ ื”ืจื‘ื” ืงื•ื“ ื”ื’ื™ื•ื ื™ ื•ืงืฆืช ืงื•ื“ ืžื•ื–ืจ. ื ืชื—ื™ืœ ืžื”ืงื•ื“ ื”ื”ื’ื™ื•ื ื™. ืื ื™ืฉ ืœื™ ืงื•ืžืคื•ื ื ื˜ื” ืฉืื ื™ ื™ื•ื“ืข ืฉื”ื™ืœื“ื™ื ืฉืœื” ื™ืฆื˜ืจื›ื• ืœืงื‘ืœ ืžื™ื“ืข ืžื”ืจืฉืช, ื•ืื ื™ ืจื•ืฆื” ืœื™ื™ืฆืจ ืžืกืš "ืžืฆื‘ ื˜ืขื™ื ื”" ืื—ื“ ืฉื™ื•ืคื™ืข ืขื“ ืฉื›ืœ ื”ื™ืœื“ื™ื ื™ื”ื™ื• ืžื•ื›ื ื™ื, ืื ื™ ืขื•ื˜ืฃ ืืช ื”ื™ืœื“ื™ื ื‘ืงื•ืžืคื•ื ื ื˜ืช Suspense:
export default function ArtistPage({ artist }) {
  return (
    <>
      <h1>{artist.name}</h1>
      <Suspense fallback={<Loading />}>
        <Albums artistId={artist.id} />
      </Suspense>
    </>
  );
}
ื”ืžืืคื™ื™ืŸ fallback ืฉืœ Suspense ืžืงื‘ืœ ืงื•ืžืคื•ื ื ื˜ื” ืฉืชื•ืฆื’ ื‘ื–ืžืŸ ืฉืื ื—ื ื• ืžื—ื›ื™ื ืฉื”ื™ืœื“ื™ื ื™ืกื™ื™ืžื• ืœื˜ืขื•ืŸ ืืช ื›ืœ ื”ืžื™ื“ืข ืฉืœื”ื ืžื”ืจืฉืช. ื‘ืฆื•ืจื” ื›ื–ืืช ื™ืฉ ืœื™ ืงื•ืžืคื•ื ื ื˜ื” ืื—ืช ืฉืื—ืจืื™ืช ืขืœ "ืžืฆื‘ ื”ื˜ืขื™ื ื”", ื‘ืœื™ ืงืฉืจ ืœื›ืžื” ืงื•ืžืคื•ื ื ื˜ื•ืช ื‘ืคื ื™ื ืฆืจื™ื›ื•ืช ืžื™ื“ืข. ื’ื ื‘ืฆื“ ื”ืงื•ืžืคื•ื ื ื˜ื” ืฉืฆืจื™ื›ื” ืืช ื”ืžื™ื“ืข ื”ืขื‘ื•ื“ื” ืฉืœื™ ื™ื•ืชืจ ืงืœื” ื›ื™ ืื ื™ ื›ื‘ืจ ืœื ืฆืจื™ืš ืœื˜ืคืœ ื‘ืžืฆื‘ ื”ื˜ืขื™ื ื”. ื”ืงื•ื“ ื‘ืชื™ืขื•ื“ ื ืจืื” ื›ืš (ืื‘ืœ ื”ื•ื ืœื ืžื˜ืคืœ ื‘ืžืฆื‘ ืฉื’ื™ืื” ืื– ื‘ื˜ื— ืงื•ื“ ืืžื™ืชื™ ื™ื”ื™ื” ืงืฆืช ื™ื•ืชืจ ืžืกื•ื‘ืš):
export default function Albums({ artistId }) {
  const albums = use(fetchData(`/${artistId}/albums`));
  return (
    <ul>
      {albums.map(album => (
        <li key={album.id}>
          {album.title} ({album.year})
        </li>
      ))}
    </ul>
  );
}
ืฉื™ืžื• ืœื‘ ืื™ืš ืœื ืฆืจื™ืš ืœื‘ื“ื•ืง ืื albums ืžื•ื›ืŸ ืื• ืœื. ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™ (ื˜ื•ื‘ ื—ืฆื™ ืื•ื˜ื•ืžื˜ื™, ืชื›ืฃ ื ืจืื” ื‘ื“ื™ื•ืง ืื™ืš) ื”ืงื•ื“ ื™ืคืขืœ ืจืง ืื—ืจื™ ืฉื‘ืงืฉืช ื”ืจืฉืช ื—ื–ืจื”. ื•ืขื›ืฉื™ื• ืœื—ืœืง ื”ืžื•ื–ืจ ื•ืœืกื™ื‘ื” ืฉื›ืชื‘ืชื™ "ื—ืฆื™ ืื•ื˜ื•ืžื˜ื™". ื‘ืฉื‘ื™ืœ ืฉื–ื” ื™ืขื‘ื•ื“ ื”ืงื•ื“ ืฆืจื™ืš ืื™ื›ืฉื”ื• "ืœื‘ืจื•ื—" ืžื”ืคื•ื ืงืฆื™ื” Albums ืื ื”ืžื™ื“ืข ืžื”ืฉืจืช ืขื“ื™ื™ืŸ ืœื ืžื•ื›ืŸ. ื–ื” ื”ืชืคืงื™ื“ ืฉืœ ื”ืคื•ื ืงืฆื™ื” use ืฉืžื•ื’ื“ืจืช ื›ืš:
function use(promise) {
  if (promise.status === 'fulfilled') {
    return promise.value;
  } else if (promise.status === 'rejected') {
    throw promise.reason;
  } else if (promise.status === 'pending') {
    throw promise;
  } else {
    promise.status = 'pending';
    promise.then(
      result => {
        promise.status = 'fulfilled';
        promise.value = result;
      },
      reason => {

ToCode
1 420
# ื”ืฆื™ืœื•! ืกืคืจื™ื™ืช ื”ืงื•ื“ ื”ืคืชื•ื— ืฉืื ื™ ืฆืจื™ืš ื›ื‘ืจ ืœื ืžืชื•ื—ื–ืงืช ื‘ืขื•ืœื ืฉืœ ื”ื™ื•ื ื”ื“ื‘ืจ ื”ื›ื™ ืงืœ ื‘ืคืจื•ื™ืงื˜ ื–ื” ืœื”ื•ืกื™ืฃ ืชืœื•ืช ื‘ืขื•ื“ ืกืคืจื™ื™ืช ืงื•ื“ ืคืชื•ื—. ืฆืจื™ื›ื” ื”ืฆืคื ื”? ื™ืฉ ืžื•ื“ื•ืœ ื‘ pip ืฉืขื•ืฉื” ืืช ื–ื”. ืฆืจื™ืš ืœืคืชื•ื— ืงื•ื‘ืฅ ื–ื™ืค? ืคืฉื•ื˜ ืชืจื™ืฅ npm install. ืœืคืขืžื™ื ื ื“ืžื” ืœื™ ืฉื—ืฆื™ ืžื”ืขื‘ื•ื“ื” ืฉืœื ื• ื”ื™ื ืœืžืฆื•ื ืืช ื”ืžื•ื“ื•ืœ ื”ืžืชืื™ื ื‘ืฉื‘ื™ืœ ืœืคืชื•ืจ ืืช ื”ื‘ืขื™ื”. ื”ื‘ืขื™ื” ืฉื›ืฉื”ืคืจื•ื™ืงื˜ ืžืชื‘ื’ืจ ื›ืš ื’ื ืกืคืจื™ื™ืช ื”ืงื•ื“ ื”ืคืชื•ื— ืฉืฉื™ืœื‘ืชื, ื•ืœื ื‘ื˜ื•ื— ืฉืื”ื‘ืช ื”ื ืขื•ืจื™ื ืžืœืคื ื™ ืฉื ืชื™ื™ื ื”ื™ื ื”ืฉื•ืชืคื” ื”ืžื•ืฉืœืžืช ื’ื ืœืคืจื•ื™ืงื˜ ืฉืœ ื”ื™ื•ื. ื”ืจื‘ื” (ืžืื•ื“) ืกืคืจื™ื•ืช ืงื•ื“ ืคืชื•ื— ื”ืชื—ื™ืœื• ื‘ืชื•ืจ ืจืขื™ื•ืŸ ืื• ืฆื•ืจืš ืฉืœ ืžืชื›ื ืช ืคืจื˜ื™, ืœื ื–ื›ื• ืœืžื™ืžื•ืŸ ื•ื ื ื˜ืฉื• ืื—ืจื™ ืฉื”ืคืกื™ืงื• ืœื”ื™ื•ืช "ื›ื™ืฃ" ืœืื•ืชื ืžืชื›ื ืช ืื• ืžืชื›ื ืชืช ืฉื›ืชื‘ื• ืื•ืชื ื‘ืžืงื•ืจ. ืืคื™ืœื• ืคืจื•ื™ืงื˜ื™ ืงื•ื“ ืคืชื•ื— ืžืกื—ืจื™ื™ื ืจื‘ื™ื ื ื ื˜ืฉื™ื, ื›ืฉื”ื—ื‘ืจื” ืฉื‘ื ืชื” ืื•ืชื ืจื•ืื” ืฉื–ื” ืœื ืžื‘ื™ื ืœื”ื ืืช ื™ื—ืกื™ ื”ืฆื™ื‘ื•ืจ ื”ื˜ื•ื‘ื™ื ืืœื™ื”ื ื”ื ืงื™ื•ื•, ืื• ื›ืฉื”ืกื˜ืืจื˜ ืืค ืฉื‘ื ื” ืื•ืชื ื ืกื’ืจ ื›ื™ ื ื’ืžืจ ื”ืžื™ืžื•ืŸ. ื‘ืงื™ืฆื•ืจ ื–ื” ืœื ืžื•ื–ืจ ื‘ื›ืœืœ ืœืขื‘ื•ื“ ืขืœ ืคืจื•ื™ืงื˜ ืฉื—ืฆื™ ืžื”ืชืœื•ื™ื•ืช ืฉืœื• ื›ื‘ืจ ืœื ื ืชืžื›ื•ืช. ื•ืื ื–ื” ื’ื ื”ืžืงืจื” ืฉืœื›ื ื”ื ื” ื›ืžื” ืจืขื™ื•ื ื•ืช ืคืจืงื˜ื™ื™ื ืฉืืคืฉืจ ืœื ืกื•ืช: 1. ืœื”ืชืขืœื - ื–ื•ื›ืจื™ื ืืช "ืื ื–ื” ืขื•ื‘ื“ ืœื ื ื•ื’ืขื™ื"? ืื– ื”ืจื‘ื” ืคืขืžื™ื ืื ื—ื ื• ืจื•ืื™ื ืคืจื•ื™ืงื˜ื™ื ืฉืชืœื•ื™ื™ื ื‘ืกืคืจื™ื•ืช ืงื•ื“ ืคืชื•ื— ืฉื›ื‘ืจ ืฉื ื™ื ืœื ืžืชื•ื—ื–ืงื•ืช, ื•ืœืืฃ ืื—ื“ ืœื ืื›ืคืช. ื‘ื“ืจืš ื›ืœืœ ื‘ืคืจื•ื™ืงื˜ื™ื ื›ืืœื” ื™ื”ื™ื• ื›ืœ ืžื™ื ื™ ื›ืœืœื™ื ืžื•ื–ืจื™ื ื›ืžื• "ืืกื•ืจ ืœืฉื“ืจื’ ืืช node ื›ื™ ืื– ื›ืœื•ื ืœื ื™ืขื‘ื•ื“", ื•ื›ื•ืœื ืžืชื›ื ื ื™ื ื™ื•ื ืื—ื“ ืœืฉื“ืจื’ ืืช ื”ืชืœื•ืช ื”ืœื ืžืชื•ื—ื–ืงืช ืื‘ืœ ืœื ืžื’ื™ืขื™ื ืœื–ื”. 2. ืœื™ืฆื•ืจ fork ืžืชื•ื—ื–ืง - ื›ืฉ kreeti ืฉืžื• ืœื‘ ืฉืกืคืจื™ื™ืช ื”ืจื™ื™ืœืก ื”ืื”ื•ื‘ื” ืขืœื™ื”ื ื ื ื˜ืฉื”, ื”ื ื™ืฆืจื• ืคื•ืจื˜ ืžืชื•ื—ื–ืง. ื•ื›ืŸ ื™ืฉ ืืคื™ืœื• ื›ืœื™ ืฉืขื•ื–ืจ ืœืžืฆื•ื ืคื•ืจืงื™ื ืงื™ื™ืžื™ื ืœืกืคืจื™ื•ืช ืฉื ื ื˜ืฉื•. 3. ืœื”ื™ืคืจื“ ืžื”ืชืœื•ืช ื•ืœื”ืžืฉื™ืš ื”ืœืื” - ืจื•ื‘ ื”ืกื™ื›ื•ื™ื™ื ืฉืื ื”ื‘ืขื™ื” ืฉืœื›ื ืžืขื ื™ื™ื ืช ื™ืฉ ื’ื ืื ืฉื™ื ืื—ืจื™ื ืฉื ืชืงืœื• ื‘ื” ื•ื™ืฉ ืœื” ืคื™ืชืจื•ื ื•ืช ืื—ืจื™ื, ื˜ื•ื‘ื™ื ื™ื•ืชืจ ืžื”ืคื™ืชืจื•ืŸ ื”ื™ืฉืŸ ื”ื”ื•ื ืฉื›ื‘ืจ ืœื ืžืชื•ื—ื–ืง. ื‘ื“ื•ื’ืžื” ืฉืงื™ืฉืจืชื™ ืืœื™ื” ืงื•ื“ื ืฉืœ ืคื™ื™ืคืจืงืœื™ืค, ื™ืฉ ื›ื‘ืจ ืคื™ืชืจื•ืŸ ืžื•ื‘ื ื” ื‘ืจื™ื™ืœืก ืฉืคื•ืชืจ ื‘ื“ื™ื•ืง ืืช ืื•ืชื” ื‘ืขื™ื” (ื–ืืช ื”ืกื™ื‘ื” ืฉื”ืกืคืจื™ื” ื”ืžืงื•ืจื™ืช ื ื ื˜ืฉื”). ืื ื”ืคืจื•ื™ืงื˜ ืฉืœื›ื ืžืกืคื™ืง ื—ืฉื•ื‘, ืฉื•ื•ื” ืœื”ืฉืงื™ืข ืืช ื”ื–ืžืŸ ื•ืœืขื‘ื•ืจ ืœืคื™ืชืจื•ืŸ ื”ื—ื“ืฉ ื™ื•ืชืจ. ื”ืืคืฉืจื•ืช ื”ืฉืœื™ืฉื™ืช ื”ื™ื ื”ืžื•ืขื“ืคืช ืขืœื™ื™. ืœืžืจื•ืช ืฉืืคืฉืจ ืœื”ื™ืฉืืจ ืขื ืคื™ืชืจื•ื ื•ืช ื™ืฉื ื™ื ื•ืœื’ืจื•ื ืœื›ืœ ื“ื‘ืจ ืœืขื‘ื•ื“, ืื™ืŸ ื›ืžื• ื”ื›ื™ืฃ ื‘ืœืขื‘ื•ื“ ืขืœ ืคืจื•ื™ืงื˜ ืฉื”ื›ืœ ื‘ื• ื—ื“ืฉ, ื•ืฉืืคืฉืจ ื‘ืงืœื•ืช ืœืžืฆื•ื ืชื™ืขื•ื“ ืจืœื•ื•ื ื˜ื™ ื•ืœืฉืœื‘ ื™ื›ื•ืœื•ืช ื—ื“ืฉื•ืช ืื• ื›ืœื™ื ื—ื“ืฉื™ื ื‘ืœื™ ื”ืชื ื’ืฉื•ื™ื•ืช ืžื•ื–ืจื•ืช.

ToCode
1 420
# ืœืžื” ืœืžื—ื•ืง ืงื•ื“? ืื•ื“ื™ ื”ืจืฉืงื•ื‘ื™ืฅ ื›ืชื‘ ื‘ืกื™ืคื•ืจ ืขืœ ื”ื‘ืจืื ืฅ ื”ื ื“ื™ื‘- > ื•ืžื ื”ืœ ื”ืคื™ืชื•ื— ื’ื™ื™ืก ืขื•ื“ ื˜ืืœื ื˜ื™ื ื•ื”ื•ืกื™ืฃ ื”ืžื•ืŸ ื‘ืื–ื–-ื•ื•ืจื“ืก ืœ Branch, ื•ื”ืงื•ื“ ื”ืœืš ื•ื”ืกืชื‘ืš ื•ื ื”ื™ื” ื›ื‘ื“ ื•ืžืกื•ืจื‘ืœ, ื•ืืฃ ืื—ื“ ื›ื‘ืจ ืœื ื™ื“ืข ื‘ื“ื™ื•ืง ืžื” ืขื•ืฉื™ื ื•ืœืžื”, ืื‘ืœ ื”ื“ื‘ืจื™ื ืื™ื›ืฉื”ื• ืขื‘ื“ื•. ื•ื”ืžืฉืงื™ืขื™ื ืจืื• ืจืง ืืช ื”ืฆืžื™ื—ื” ื”ืื“ื™ืจื” ืฉืœ ื” Branch, ื•ื”ืžืฉื™ื›ื• ืœื”ื–ืจื™ื ื›ืกืฃ. ื•ืœืžืจื•ืช ื”ื‘ืœืื’ืŸ ื•ื”ืกืคื’ื˜ื™ ื”ืชื•ื›ื ื” ื”ืžืฉื™ื›ื” ืœืขื‘ื•ื“ ืื™ื›ืฉื”ื•, ื•ื” Branch ื”ื™ื” ืžืงื•ืžืคืœ. ืงื•ื“ ืขื•ื‘ื“ ื”ื•ื ืžืฉืงื•ืœืช. ื”ื•ื ื™ื•ืฆืจ ืื™ืœื•ืฆื™ื, ื”ื•ื ื™ื•ืฆืจ ื‘ืขื™ื•ืช ืงื•ืžืคื™ืœืฆื™ื” ื›ืฉืžื ืกื™ื ืœื”ื–ื™ื– ื“ื‘ืจื™ื ืžืžืงื•ื ืœืžืงื•ื, ื”ื•ื ืžื•ื ืข Refactoring ื›ื™ ืื™ ืืคืฉืจ ืœื“ืขืช ืื™ืš ื–ื” ื™ืฉืคื™ืข ืขืœ ื”ื“ื‘ืจื™ื ื”ืงื™ื™ืžื™ื. ื–ื” ืœื ืกืชื ืฉืžืชื›ื ืชื™ื ื”ื›ื™ ืื•ื”ื‘ื™ื ืคืจื•ื™ืงื˜ื™ Green Fields. ื›ืฉืื™ืŸ ืงื•ื“ ืื™ืŸ ืžื” ืฉื™ื™ืฉื‘ืจ. ื•ืœืžื—ื•ืง ืงื•ื“? ืœืžื—ื•ืง ืงื•ื“ ื–ืืช ื”ื“ืจืš ื”ื›ื™ ืงืœื” ืœื”ืื™ืฅ ืืช ื”ืคื™ืชื•ื—. ื–ื” ืœื”ืงื˜ื™ืŸ ืืช ื›ื“ื•ืจ ื”ื‘ื•ืฅ ื”ืขื ืง ืฉืื ื—ื ื• ืงื•ืจืื™ื ืœื• ืžืขืจื›ืช. ื›ื“ื™ ืฉื”ื‘ืจืื ืฅ ืฉืœื ื• ืœื ื™ื’ืžื•ืจ ื›ืžื• ื”ื‘ืจืื ืฅ ื”ื ื“ื™ื‘.

ToCode
1 420
# ืื™ืœื•ืฆื™ื ืคื™ืงื˜ื™ื‘ื™ื™ื "ืฉื™ืžื• ืœื‘ ื›ื•ืœื ื”ื™ื•ื ื ื›ืชื•ื‘ ืžืžืฉืง ื’ืจืคื™ ืžื‘ื•ืกืก ื•ื•ื‘ ืœืžื—ืฉื‘ื•ืŸ ืฉืจืง ื™ื•ื“ืข ืœื—ื‘ืจ ืžืกืคืจื™ื. ื”ืžืžืฉืง ืฆืจื™ืš ืœืืคืฉืจ ืœืžืฉืชืžืฉ ืœื”ืงืœื™ื“ ืžืกืคืจื™ื ื•ื›ืฉืœื•ื—ืฆื™ื ืขืœ ื›ืคืชื•ืจ ืฆืจื™ืš ืœื”ืฆื™ื’ ืืช ืกื›ื•ื ื›ืœ ื”ืžืกืคืจื™ื ืฉื”ื•ืงืœื“ื•." "ืจื’ืข ื‘ื•ืก ืื™ืŸ ืคื” ืžืกืคื™ืง ืื™ื ืคื•ืจืžืฆื™ื”" ื ืฉืžืข ืงื•ืœ ืžืชื›ื ืชื™ ืžืงืฆื” ื”ื—ื“ืจ, "ืžื” ื’ื‘ื•ืœื•ืช ื”ื’ื™ื–ืจื”? ื‘ื›ืžื” ืžืกืคืจื™ื ืฆืจื™ืš ืœืชืžื•ืš?" "ืื ื™ ืœื ื™ื•ื“ืข ืชื–ื›ื•ืจ ืฉื–ื• ืคืขื•ืœืช ื—ื™ื‘ื•ืจ ืื– ื‘ื˜ื— ืœื ื™ื”ื™ื” ืคื—ื•ืช ืž-1, ื•ื’ื ื™ื•ืชืจ ืžื“ื™ ืฉื•ืจื•ืช ืœื ื ืจืื” ื™ืคื” ืขืœ ื”ืžืกืš ืื– ื‘ื•ืื• ื ื’ื‘ื™ืœ ืืช ื–ื” ืœ-10 ืžืกืคืจื™ื ื‘ืžืงืกื™ืžื•ื". ื•ื›ืš ื ื•ืœื“ ืื™ืœื•ืฅ ืคื™ืงื˜ื™ื‘ื™. ืžื›ืืŸ ื›ืœ ืžื™ื ื™ ืžืงื•ืžื•ืช ื‘ืงื•ื“ ื™ื›ื•ืœื™ื ืœื”ืชื—ื™ืœ ืœื”ืชื‘ืกืก ืขืœ ื–ื” ืฉ"ืืฃ ืคืขื ืœื ื™ื”ื™ื• ื™ื•ืชืจ ืž 10 ืชื™ื‘ื•ืช", ื•ืœื›ืชื•ื‘ ืคื•ื ืงืฆื™ื•ืช ื›ืžื• ื–ื• ืœืžืฉืœ:
function update() {
  var i;
  for (i = 3; i <= 10; i++) {
    labelID = "line_R" + i;
    if (document.getElementById("num").value >= i) {
      document.getElementById(labelID).style.display = "list-item";
    } else {
      document.getElementById(labelID).style.display = "none";
    }
  }
}

ืื™ืœื•ืฆื™ื ื”ื ืื—ืœื” ื›ื™ ื”ื ื ื•ืชื ื™ื ืœื ื• ืืคืฉืจื•ืช ืœื”ืชืงื“ื. ื–ื” ืฉื”ืžืžืฉืง ืฆืจื™ืš ืœื”ื™ื•ืช ืžื‘ื•ืกืก ื•ื•ื‘ ืื• ืœืขื‘ื•ื“ ื‘ืฆื“-ืœืงื•ื— ื‘ืœื‘ื“ ืืœื” ื“ื‘ืจื™ื ืฉืื ื—ื ื• ื—ื™ื™ื‘ื™ื ืœื“ืขืช ื‘ืฉื‘ื™ืœ ืœื›ืชื•ื‘ ืืช ื”ืงื•ื“. ืื‘ืœ ื›ืžื• ืฉืื™ืœื•ืฆื™ื ืขื•ื–ืจื™ื ืœื”ืชืงื“ื ื›ืš ื”ื ื’ื ืงืฉื™ื ืœืฉื™ื ื•ื™. ื”ืืชื’ืจ ื‘ื‘ื ื™ื™ืช ืžืขืจื›ืช ื”ื•ื ืœื ืœื ืกื•ืช ืœืขื‘ื•ื“ ื‘ืœื™ ืื™ืœื•ืฆื™ื (ื›ื™ ืื– ืœื ืชืฆืœื™ื—ื• ืœื‘ื ื•ืช ืฉื•ื ื“ื‘ืจ) ืืœื ืœืžืฆื•ื ืืช ืกื˜ ื”ืื™ืœื•ืฆื™ื ื”ืžื™ื ื™ืžืœื™ ืฉืื™ืชื• ืืคืฉืจ ืœืจื•ืฅ ืงื“ื™ืžื”.

ToCode
1 420
# ืื™ืœื•ืฆื™ื ืคื™ืงื˜ื™ื‘ื™ื™ื "ืฉื™ืžื• ืœื‘ ื›ื•ืœื ื”ื™ื•ื ื ื›ืชื•ื‘ ืžืžืฉืง ื’ืจืคื™ ืžื‘ื•ืกืก ื•ื•ื‘ ืœืžื—ืฉื‘ื•ืŸ ืฉืจืง ื™ื•ื“ืข ืœื—ื‘ืจ ืžืกืคืจื™ื. ื”ืžืžืฉืง ืฆืจื™ืš ืœืืคืฉืจ ืœืžืฉืชืžืฉ ืœื”ืงืœื™ื“ ืžืกืคืจื™ื ื•ื›ืฉืœื•ื—ืฆื™ื ืขืœ ื›ืคืชื•ืจ ืฆืจื™ืš ืœื”ืฆื™ื’ ืืช ืกื›ื•ื ื›ืœ ื”ืžืกืคืจื™ื ืฉื”ื•ืงืœื“ื•." "ืจื’ืข ื‘ื•ืก ืื™ืŸ ืคื” ืžืกืคื™ืง ืื™ื ืคื•ืจืžืฆื™ื”" ื ืฉืžืข ืงื•ืœ ืžืชื›ื ืชื™ ืžืงืฆื” ื”ื—ื“ืจ, "ืžื” ื’ื‘ื•ืœื•ืช ื”ื’ื™ื–ืจื”? ื‘ื›ืžื” ืžืกืคืจื™ื ืฆืจื™ืš ืœืชืžื•ืš?" "ืื ื™ ืœื ื™ื•ื“ืข ืชื–ื›ื•ืจ ืฉื–ื• ืคืขื•ืœืช ื—ื™ื‘ื•ืจ ืื– ื‘ื˜ื— ืœื ื™ื”ื™ื” ืคื—ื•ืช ืž-1, ื•ื’ื ื™ื•ืชืจ ืžื“ื™ ืฉื•ืจื•ืช ืœื ื ืจืื” ื™ืคื” ืขืœ ื”ืžืกืš ืื– ื‘ื•ืื• ื ื’ื‘ื™ืœ ืืช ื–ื” ืœ-10 ืžืกืคืจื™ื ื‘ืžืงืกื™ืžื•ื". ื•ื›ืš ื ื•ืœื“ ืื™ืœื•ืฅ ืคื™ืงื˜ื™ื‘ื™. ืžื›ืืŸ ื›ืœ ืžื™ื ื™ ืžืงื•ืžื•ืช ื‘ืงื•ื“ ื™ื›ื•ืœื™ื ืœื”ืชื—ื™ืœ ืœื”ืชื‘ืกืก ืขืœ ื–ื” ืฉ"ืืฃ ืคืขื ืœื ื™ื”ื™ื• ื™ื•ืชืจ ืž 10 ืชื™ื‘ื•ืช", ื•ืœื›ืชื•ื‘ ืคื•ื ืงืฆื™ื•ืช ื›ืžื• ื–ื• ืœืžืฉืœ:
function update() {
  var i;
  for (i = 3; i <= 10; i++) {
    labelID = "line_R" + i;
    if (document.getElementById("num").value >= i) {
      document.getElementById(labelID).style.display = "list-item";
    } else {
      document.getElementById(labelID).style.display = "none";
    }
  }
}

ืื™ืœื•ืฆื™ื ื”ื ืื—ืœื” ื›ื™ ื”ื ื ื•ืชื ื™ื ืœื ื• ืืคืฉืจื•ืช ืœื”ืชืงื“ื. ื–ื” ืฉื”ืžืžืฉืง ืฆืจื™ืš ืœื”ื™ื•ืช ืžื‘ื•ืกืก ื•ื•ื‘ ืื• ืœืขื‘ื•ื“ ื‘ืฆื“-ืœืงื•ื— ื‘ืœื‘ื“ ืืœื” ื“ื‘ืจื™ื ืฉืื ื—ื ื• ื—ื™ื™ื‘ื™ื ืœื“ืขืช ื‘ืฉื‘ื™ืœ ืœื›ืชื•ื‘ ืืช ื”ืงื•ื“. ืื‘ืœ ื›ืžื• ืฉืื™ืœื•ืฆื™ื ืขื•ื–ืจื™ื ืœื”ืชืงื“ื ื›ืš ื”ื ื’ื ืงืฉื™ื ืœืฉื™ื ื•ื™. ื”ืืชื’ืจ ื‘ื‘ื ื™ื™ืช ืžืขืจื›ืช ื”ื•ื ืœื ืœื ืกื•ืช ืœืขื‘ื•ื“ ื‘ืœื™ ืื™ืœื•ืฆื™ื (ื›ื™ ืื– ืœื ืชืฆืœื™ื—ื• ืœื‘ื ื•ืช ืฉื•ื ื“ื‘ืจ) ืืœื ืœืžืฆื•ื ืืช ืกื˜ ื”ืื™ืœื•ืฆื™ื ื”ืžื™ื ื™ืžืœื™ ืฉืื™ืชื• ืืคืฉืจ ืœืจื•ืฅ ืงื“ื™ืžื”.

ToCode
1 420
ื‘ืคื™ืชื•ื— ืชื•ื›ื ื” ื”ืกื™ื˜ื•ืืฆื™ื” ื”ื™ื ืืฃ ืคืขื ืœื "ื›ืžื” ืฉื™ื•ืชืจ ื™ื•ืชืจ ื˜ื•ื‘"; ืœื›ืœ ื‘ื—ื™ืจื” ื™ืฉ ืขืœื•ืช, ื•ื›ื“ืื™ ืœื—ืคืฉ ืื•ืชื” ืœืคื ื™ ื”ืฉื™ืžื•ืฉ ื‘ื›ืœื™ ื”ื—ื“ืฉ.

ToCode
1 420
# ื”ืขืœื•ืช ืฉืœ ืงื™ืฆื•ืจื™ ื“ืจืš (ื•ืœืžื” ื›ืœ ื›ืš ืžืกื•ื‘ืš ืœื›ืชื•ื‘ gitignore) ื ื™ืกื™ืชื™ ืœื‘ืงืฉ ื”ืฉื‘ื•ืข ืž gitignored ืœื™ืฆื•ืจ ืœื™ ืงื•ื‘ืฅ gitignore ืœืคืจื•ื™ืงื˜ ืคื™ื™ืชื•ืŸ. ื–ืืช ื”ื™ืชื” ื”ื”ืฆืขื” ืฉืœื•:
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
.pybuilder/
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv
#   For a library or package, you might want to ignore these files since the code is
#   intended to run in multiple environments; otherwise, check them in:
# .python-version

# pipenv
#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
#   However, in case of collaboration, if having platform-specific dependencies or dependencies
#   having no cross-platform support, pipenv may install dependencies that don't work, or not
#   install all needed dependencies.
#Pipfile.lock

# poetry
#   Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
#   This is especially recommended for binary packages to ensure reproducibility, and is more
#   commonly ignored for libraries.
#   https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock

# pdm
#   Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
#   pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
#   in version control.
#   https://pdm.fming.dev/#use-with-ide
.pdm.toml

# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/

# Celery stuff
celerybeat-schedule
celerybeat.pid

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

# pytype static type analyzer
.pytype/

# Cython debug symbols
cython_debug/

# PyCharm
#  JetBrains specific template is maintained in a separate JetBrains.gitignore that can
#  be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
#  and can be added to the global gitignore or merged into this file.  For a more nuclear
#  option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
ืื—ืกื•ืš ืœื›ื ืืช ื”ืกืคื™ืจื” - ื™ืฉ ืคื” 160 ืฉื•ืจื•ืช. ืžืื” ื•ืฉื™ืฉื™ื. ืื ื™ ืžื ื—ืฉ ืฉืจืง ื—ืœืง ืงื˜ืŸ ืžื”ืื ืฉื™ื ืฉื™ืฉืชืžืฉื• ื‘ืชื‘ื ื™ืช ื›ื–ืืช ื‘ืืžืช ื™ืงืจืื• ืืช ื›ืœ ื”ืฉื•ืจื•ืช ื›ื“ื™ ืœื—ืฉื•ื‘ ืžื” ืจืœื•ื•ื ื˜ื™ ื•ืžื” ืœื. ื•ื‘ื“ื•ืžื” ืœืงื™ืฆื•ืจื™ ื“ืจืš ืื—ืจื™ื ื’ื ืคื” ื™ืฉ Trade Off. ื‘ืžืงืจื” ืฉืœ gitignore ื”ืื™ื–ื•ืŸ ื”ื•ื ื‘ื™ืŸ "ืœื”ืกืชื›ืŸ ืฉืžืฉื”ื• ืœื ื—ืฉื•ื‘ ื™ื™ื›ื ืก ืœื’ื™ื˜" ืœื‘ื™ืŸ "ืœื”ืกืชื›ืŸ ืฉืžืฉื”ื• ื—ืฉื•ื‘ ืœื ื™ื™ื›ื ืก ืœื’ื™ื˜". ื”ื˜ืžืคืœื™ื™ื˜ ื”ื—ืœื™ื˜ ืฉืืช ืชื™ืงื™ื™ืช site ืื ื™ ืฉื•ืžืจ ืžื—ื•ืฅ ืœื’ื™ื˜ ื›ื™ ื”ื•ื ื—ื•ืฉื‘ ืฉื”ื™ื ืจืœื•ื•ื ื˜ื™ืช ืœืคืจื•ื™ืงื˜ ืžืกื•ื’ ืžืกื•ื™ื, ืื‘ืœ ืื•ืœื™ ื“ื•ื•ืงื ื‘ืคืจื•ื™ืงื˜ ืฉืœื™ ืื ื™ ื›ืŸ ืฆืจื™ืš ืืช ื”ืชื™ืงื™ื” ื”ื–ืืช. ืžืฆื“ ืฉื ื™ ืื ื”ื™ื™ืชื™ ื›ื•ืชื‘ ืืช gitignore ื™ื“ื ื™ืช ื•ืžื•ืกื™ืฃ ืฉื•ืจื” ื›ืœ ืคืขื ืฉืื ื™ ืจื•ืฆื” ืœื”ืชืขืœื ืžืขื•ื“ ืงื•ื‘ืฅ, ืื– ื›ื ืจืื” ืžื“ื™ ืคืขื ื”ื™ื™ืชื™ ืฆืจื™ืš ืœืชืงืŸ ืงื•ืžื™ื˜ื™ื ืฉื”ื›ื ื™ืกื• ื‘ื˜ืขื•ืช ืงื‘ืฆื™ื ืฉืœื ืฆืจื™ื›ื™ื ืœื”ื™ื•ืช ืฉื.

ToCode
1 420
# ื”ื™ื•ื ืœืžื“ืชื™: ื”ื’ื“ืจืช ืคืจื•ื˜ื•ืงื•ืœ ื‘ Python ืžื ื’ื ื•ืŸ Type Hints ืฉืœ ืคื™ื™ืชื•ืŸ ืžืฆื™ืข ื“ืจืš ืœื”ื•ืกื™ืฃ ื”ื’ื“ืจืช ื˜ื™ืคื•ืกื™ื ืœืžืฉืชื ื™ื ื•ืคื•ื ืงืฆื™ื•ืช ืฉืœื ื•. ื›ืœื™ื ื›ืžื• mypy ื™ื›ื•ืœื™ื ืื– ืœืขื‘ื•ืจ ืขืœ ื”ืงื•ื“ ื•ืœื–ื”ื•ืช ืžืชื™ ื ื™ืกื™ื ื• ืœืขืฉื•ืช ืžืฉื”ื• ืฉืœื ื™ืขื‘ื•ื“ ื‘ื’ืœืœ ื‘ืขื™ื™ืช ื˜ื™ืคื•ืกื™ื ื•ืœื”ืฆื™ืœ ืื•ืชื ื• ืžื‘ืื’ื™ื ื˜ืคืฉื™ื™ื. ## ื”ื‘ืขื™ื” ื›ืžื•ื‘ืŸ ืฉื‘ืฉื‘ื™ืœ ืœืงื‘ืœ ืืช ื”ื”ื’ื ื” ืฆืจื™ืš ืœื“ืขืช ืœื›ืชื•ื‘ ืืช ื”ื˜ื™ืคื•ืก ืœื›ืœ "ื“ื‘ืจ" ื‘ืงื•ื“, ื•ื–ื” ืœื ืชืžื™ื“ ืคืฉื•ื˜. ื ืชื‘ื•ื ืŸ ื‘ืชื•ื›ื ื™ืช ื”ื‘ืื”:
def paint_circle(*, x: int, y: int):
    print(f"Circle: x={x}, y={y}")


def paint_triangle(*, x: int, y: int):
    print(f"Triangle: x={x}, y={y}")


def bad_painter(x, y, z):
    print("Bad painter: x={x}, y={y}, z={z}")


def paint(shapes: List[Callable]):
    for shape in shapes:
        shape(x=10, y=20)


paint([
    paint_circle,
    paint_circle,
    bad_painter,
    paint_triangle,
])
ื”ืชื•ื›ื ื™ืช ืžื’ื“ื™ืจื” ืคื•ื ืงืฆื™ื” ื‘ืฉื paint ืฉืžืงื‘ืœืช ืจืฉื™ืžื” ืฉืœ ืคื•ื ืงืฆื™ื•ืช ืฆื™ื•ืจ, ื•ืžืคืขื™ืœื” ื›ืœ ืคื•ื ืงืฆื™ื™ืช ืฆื™ื•ืจ ืขื keyword arguments ื‘ืฉืžื•ืช x ื• y. ื‘ืขื–ืจืช Callable ื”ืฆืœื—ืชื™ ืœื”ื’ื“ื™ืจ ื‘ืงืœื•ืช ืฉืื ื™ ืžื—ืคืฉ ืจืฉื™ืžื” ืฉืœ ืคื•ื ืงืฆื™ื•ืช, ืื‘ืœ Callable ืœื ื ื•ืชืŸ ืœื™ ื“ืจืš ืœื”ื’ื™ื“ ืฉื”ืคื•ื ืงืฆื™ื•ืช ืฆืจื™ื›ื•ืช ืœืงื‘ืœ ืคืจืžื˜ืจื™ื ื‘ืฉืžื•ืช ืžืกื•ื™ืžื™ื (ื›ืŸ ืืคืฉืจ ืœื”ื•ืกื™ืฃ ืกื•ื’ืจื™ื™ื ืžืจื•ื‘ืขื™ื ืื—ืจื™ Callable ื›ื“ื™ ืœืงื‘ื•ืข ืืช ื”ื˜ื™ืคื•ืกื™ื ื”ืจื’ื™ืœื™ื ืฉืคื•ื ืงืฆื™ื” ืžืงื‘ืœืช, ืื‘ืœ ืœื ืืช ื” Keyword Arguments). ืœื›ืŸ ื›ืฉืžืคืขื™ืœื™ื mypy ืขืœ ื”ืงื•ื“ ืฉืœืžืขืœื” ืžืงื‘ืœื™ื:
Success: no issues found in 1 source file
## ืคืจื•ื˜ื•ืงื•ืœื™ื ืœื”ืฆืœื” ื”ืคื™ืฆ'ืจ ืฉืœ mypy ืฉื™ื›ื•ืœ ืœืขื–ื•ืจ ื›ืืŸ ื ืงืจื Protocol. ืœืคื™ ื”ืชื™ืขื•ื“ ืื ื—ื ื• ืžื’ื“ื™ืจื™ื ืื•ืชื• ื‘ืื•ืคืŸ ื”ื‘ื:
from typing import Optional, Iterable
from typing_extensions import Protocol

class Combiner(Protocol):
    def __call__(self, *vals: bytes, maxlen: Optional[int] = None) -> list[bytes]: ...
ื•ื›ืš ื™ื›ื•ืœื™ื ืœืงื‘ื•ืข ืžื” ื™ื”ื™ื• ื”ืคืจืžื˜ืจื™ื ืฉืœ ื”ืคื•ื ืงืฆื™ื” ื›ืฉืงื•ืจืื™ื ืœื” ื›ื•ืœืœ ืžื” ื™ื”ื™ื• ื”ืฉืžื•ืช ืฉืœ ื” Keyword Arguments. ื‘ืชื•ื›ื ื™ืช ืฉืœื ื• ืคืจื•ื˜ื•ืงื•ืœ ืžืฆื™ืœ ืืช ื”ืžืฆื‘ ื‘ืงืœื•ืช:
from typing import Callable, TypeVar, List
from typing_extensions import Protocol


class Painter(Protocol):
    def __call__(self, *, x: int, y: int) -> None: ...


def paint_circle(*, x: int, y: int):
    print(f"Circle: x={x}, y={y}")


def paint_triangle(*, x: int, y: int):
    print(f"Triangle: x={x}, y={y}")


def bad_painter(*, x, y, z):
    print("Bad painter: x={x}, y={y}, z={z}")


def paint(shapes: List[Painter]):
    for shape in shapes:
        shape(x=10, y=20)


paint([
    paint_circle,
    paint_circle,
    bad_painter,
    paint_triangle,
])
ื•ืขื›ืฉื™ื• ื›ืฉืžืคืขื™ืœื™ื mypy ืžืงื‘ืœื™ื ืืช ื”ืฉื’ื™ืื”:
named_arguments.py:29: error: List item 2 has incompatible type "Callable[[NamedArg(Any, 'x'), NamedArg(Any, 'y'), NamedArg(Any, 'z')], Any]"; expected "Painter"
Found 1 error in 1 file (checked 1 source file)
ืฉื•ื•ื” ืœืฉื™ื ืœื‘ ืฉืœืคื—ื•ืช ืืฆืœื™ PyCharm ื‘ืœื™ mypy ืœื ื”ืฆืœื™ื— ืœื–ื”ื•ืช ืืช ื”ื˜ืขื•ืช, ื•ืืช ื”ืฉื’ื™ืื” ืจืื™ืชื™ ืจืง ื‘ื”ืคืขืœื” ื™ืฉื™ืจื” ืฉืœ mypy ืžืฉื•ืจืช ื”ืคืงื•ื“ื” ืื• ื“ืจืš ื”ืคืœืื’ื™ืŸ ื‘ืคื™ื™ืฆ'ืืจื.

ToCode
1 420
# ืžืชื™ ืขื•ืฆืจื™ื? ื‘ืชื™ืขื•ื“ ืฉืœ Redux ืžื•ืฆื’ืช ื”ื“ื•ื’ืžื” ื”ื‘ืื” ืœ Reducer:
function counterReducer(state = { value: 0 }, action) {
  switch (action.type) {
    case 'counter/incremented':
      return { value: state.value + action.payload }
    case 'counter/decremented':
      return { value: state.value - action.payload }
    default:
      return state
  }
}
ื”ื™ื ืขื•ื‘ื“ืช, ืื‘ืœ ืœื ื”ื•ืœื›ืช ืœื”ื–ื“ืงืŸ ื™ืคื”. ืขืœ ื›ืœ ืคืขื•ืœื” ื—ื“ืฉื” ื‘ื™ื™ืฉื•ื ื ืฆื˜ืจืš ืขื•ื“ ื‘ืœื•ืง ื‘ switch/case ื”ื–ื”, ื•ืœืื•ืจืš ื–ืžืŸ ื”ื‘ืœื•ืง ื™ื’ื“ืœ ืœืžื™ืžื“ื™ื ืžืคืœืฆืชื™ื™ื, ื™ื”ืคืš ืœืงืฉื” ืœืชื—ื–ื•ืงื” ื•ื›ืžืขื˜ ื‘ืœืชื™ ืืคืฉืจื™ ืœืฉื™ื ื•ื™. ื”ืืชื’ืจื™ื ื”ืžืจื›ื–ื™ื™ื ืฉืœ ืžื‘ื ื” ื” switch/case ื”ืงืœืืกื™ ืฉืœ ืจื™ื“ืืงืก ื”ื: 1. ืื™ืŸ Context - ืžื™ ืฉื™ืกืชื›ืœ ืขืœ ื”ืงื•ื“ ื”ื–ื” ื‘ืขื•ื“ ืฉื‘ื•ืขื™ื™ื ืœื ื™ื“ืข ืžืชื™ ืคืขื•ืœื” ืžืกื•ื™ืžืช ื ืงืจืืช, ืžื” ื”ื—ืฉื™ื‘ื•ืช ืฉืœื” ื‘ื™ื™ืฉื•ื ื‘ืื•ืคืŸ ื›ืœืœื™. 2. ืื™ืŸ ื˜ื™ืคื•ืกื™ื - ืœื ื‘ืจื•ืจ ืžื” ืฆืจื™ืš ืœื”ื™ื•ืช ื”ืขืจืš ืฉืœ action.payload ื•ืื™ืš ื”ื•ื ืžื—ื•ื‘ืจ ืœ action.type ื‘ืœื™ ืœืงืจื•ื ื•ืœื”ื‘ื™ืŸ ืืช ื”ืงื•ื“ ืขืฆืžื•. 3. ืฉื™ืžื•ืฉ ื‘ืžื—ืจื•ื–ื•ืช ื‘ืชื•ืจ ื˜ื™ืคื•ืกื™ื ืฉืœ actions-ื™ื ืื•ืžืจ ืฉืื ืžื™ืฉื”ื• ื™ืจืฆื” ืœืฉื ื•ืช ืฉื ืฉืœ ืคืขื•ืœื•ืช ื”ื•ื ื™ืฆื˜ืจืš ืœืขื‘ื•ืจ ืขืœ ื›ืœ ื”ืงื‘ืฆื™ื ื‘ื™ื™ืฉื•ื ื›ื“ื™ ืœื—ืคืฉ ืืช ื›ืœ ื”ืžืงื•ืžื•ืช ื‘ื”ื ื”ืžื—ืจื•ื–ืช ืžื•ืคื™ืขื”. ืื– ืื™ืŸ ืกืคืง ืฉืขื 10 ืฉื•ืจื•ืช ื”ื›ืœ ืขื•ื‘ื“ ืžืขื•ืœื” ืื‘ืœ ื‘ 500 ืฉื•ืจื•ืช ื›ื‘ืจ ืื™ ืืคืฉืจ ืœืชื—ื–ืง ืืช ื”ืงื•ื“. ื•ืขื›ืฉื™ื• ื”ืฉืืœื” ืžืชื™ ืขื•ืฆืจื™ื? ืžืชื™ ืžืฉื›ืชื‘ื™ื ืืช ื”ื™ืกื•ื“ื•ืช ื›ื™ ื”ืœื•ื’ื™ืงื” ืฉืœ ื”ืžืขืจื›ืช ืฉืœื ื• ื ื”ื™ื™ืชื” ืžืกื•ื‘ื›ืช ืžื“ื™? ืื ื™ ื™ื›ื•ืœ ืœื—ืฉื•ื‘ ืขืœ 3 ืืคืฉืจื•ื™ื•ืช: 1. ืืคืฉืจ ืœื—ืคืฉ ืžื”ืชื—ืœื” ื‘ืกื™ืก ืฉื™ื’ื“ืœ ื˜ื•ื‘ - ืœื“ื•ื’ืžื” ืืคืฉืจ ืœื”ืชื—ื™ืœ ืืช ื”ืคืจื•ื™ืงื˜ ืขื Redux Toolkit ื• TypeScript ื•ืœืงื‘ืœ ื™ืกื•ื“ื•ืช ื˜ื•ื‘ื™ื ื™ื•ืชืจ ืžื”ืฉื ื™ื” ื”ืจืืฉื•ื ื”. 2. ืืคืฉืจ ืœื–ื”ื•ืช ืฉืงื˜ืขื™ ืงื•ื“ ืžืกื•ื™ืžื™ื "ืžืชื—ื™ืœื™ื" ืœื”ื™ื•ืช ืžื›ื•ืขืจื™ื ืื• ืงืฉื™ื ืœืชื—ื–ื•ืงื” ื•ืœืฉื›ืชื‘ ืืช ื”ื™ืกื•ื“ื•ืช ืื™ืคืฉื”ื• ืกื‘ื™ื‘ ื”ื ืงื•ื“ื” ื”ื–ืืช. 3. ืืคืฉืจ ืœื—ื›ื•ืช ืขื“ ืฉื”ืงื•ื“ ื™ื”ื™ื” ืœื’ืžืจื™ ื›ื“ื•ืจ ืขื ืง ืฉืœ ื‘ื•ืฅ ื•ืื– ืœื‘ื ื•ืช ืื•ืชื• ืžื—ื“ืฉ ืขื ื™ืกื•ื“ื•ืช ื˜ื•ื‘ื™ื ื™ื•ืชืจ. ืœื›ืœ ื’ื™ืฉื” ื™ืฉ ืืช ื”ื™ืชืจื•ื ื•ืช ื•ื”ื—ืกืจื•ื ื•ืช ืฉืœื”, ื”ื“ื‘ืจ ื”ื—ืฉื•ื‘ ื”ื•ื ืœื‘ื—ื•ืจ ืืช ื”ื’ื™ืฉื” ื‘ืฆื•ืจื” ืžืคื•ืจืฉืช ื‘ืชื—ื™ืœืช ื”ืคื™ืชื•ื— ื›ื“ื™ ืฉื ื“ืข ืžื” ืžืฆืคื” ืœื ื•.

ToCode
1 420
# ืœืชืคื•ืก ืืช ื”ืจื’ืข ื™ื•ืฉื‘ ืžืชื›ื ืช ื‘ื—ื‘ืจืช ืชื•ื›ื ื” ื›ืœืฉื”ื™ ื•ืžืงื‘ืœ ื“ื™ื•ื•ื— ืขืœ ื‘ืื’ - ื”ื‘ื™ืœื“ื™ื ื ืฉื‘ืจื™ื. ืื—ืจื™ ืงืฆืช ืžื—ืงืจ ืžืชื’ืœื™ืช ื”ื‘ืขื™ื”: ืกืงืจื™ืคื˜ ื”ื‘ื ื™ื” ืฉืœ ื”ืชื•ื›ื ื” ืฉืœื”ื ืžื•ืจื™ื“ ืงื•ื“ ืžื’ื™ื˜ื”ืื‘ ื‘ืชื•ืจ ืงื•ื‘ืฅ tar.gz ื•ื‘ื•ื“ืง Checksum ืขืœ ื”ืงื•ื‘ืฅ ืฉื™ืจื“ ื›ื“ื™ ืœืจืื•ืช ืฉืงื™ื‘ืœ ืืช ื”ืงื•ื‘ืฅ ื”ื ื›ื•ืŸ. ืจืง ืื ื” Checksum ืžืชืื™ื ื”ื•ื ืžืจื™ืฅ ืืช ื”ื‘ื ื™ื”. ื•ืžืกืชื‘ืจ ืฉืœืื—ืจื•ื ื” ื” Checksum-ื™ื ืขืœ ืงื‘ืฆื™ ื” tag.gz ื”ืชื—ื™ืœื• ืœื”ืฉืชื ื•ืช. ืคืจื˜ื™ื ื‘ืงื™ืฉื•ืจ: https://github.com/orgs/community/discussions/45830 ืžื” ืฉืงืจื” ื–ื” ืฉื’ื™ื˜ื”ืื‘ ืฉื™ื ื• ืืช ืฉื™ื˜ืช ื”ื›ื™ื•ื•ืฅ ืฉืœื”ื, ื•ืœื›ืŸ ืœืžืจื•ืช ืฉื”ืงื•ื“ ืขืฆืžื• ื–ื”ื”, ื”ืงื•ื‘ืฅ ื”ืžื›ื•ื•ืฅ ืฉืกืงืจื™ืคื˜ ื”ื‘ื ื™ื” ืžืงื‘ืœ ืฉื•ื ื” ืžืื™ืš ืฉื”ื•ื ื”ื™ื” ื‘ืขื‘ืจ. ื•ื›ืŸ ืชืงืœื•ืช ืžืกื•ื’ ื–ื” ืงืจื• ื’ื ืœื™ ืื™ื ืกืคื•ืจ ืคืขืžื™ื ื‘ืขื‘ืจ. ื•ื–ื” ืจื’ืข ืฉืฆืจื™ืš ืœืชืคื•ืก. ื›ื™ ื‘ืจื’ืข ืฉืืชื” ืžืชื—ื™ืœ ืœื‘ื“ื•ืง ืžืกื‘ื™ื‘ ืืชื” ืžื’ืœื” ืฉื™ืฉ ื”ืจื‘ื” ืžืื•ื“ ืื ืฉื™ื ืฉืœื ื—ื•ืฉื‘ื™ื ืฉืœื’ื™ื˜ื”ืื‘ ื™ืฉ ืื™ื–ื•ืฉื”ื™ ืžื—ื•ื™ื‘ื•ืช ืœื’ื‘ื™ ื”ืื•ืคืŸ ื‘ื• ื”ื ืžื›ื•ื•ืฆื™ื ืืช ื”ืงื•ื“ ื‘ืจื™ืคื•, ื•ืืฃ ืคืขื ืœื ื”ื™ื• ื—ื•ืœืžื™ื ืœื—ืฉื‘ Checksum ืขืœ ืงื•ื‘ืฅ ื›ื–ื” ืื• ืœื”ืชื‘ืกืก ืขืœื™ื• ื‘ืฉื•ื ืกืงืจื™ืคื˜ ื‘ื ื™ื”. ื”ื ื” ื›ืžื” ืžื”ืชื’ื•ื‘ื•ืช ื‘ืจื“ื™ื˜: > It's been known for forever that these files aren't stable > GitHub doesn't guarantee the stability of checksums for automatically generated archives. annndd its gonee > This is why I generally upload tarballs to my releases. Artifacts attached to a release won't change. ื”ืกื™ื‘ื” ืฉืื ื™ ืื•ื”ื‘ ื‘ืื’ื™ื ื›ืืœื” ื”ื™ื ืฉื”ื ื—ื•ืฉืคื™ื ื‘ืขื™ื” ื‘ืื™ื ื˜ื•ืื™ืฆื™ื” ืฉืœื™, ื•ื›ืš ื”ื ื ื•ืชื ื™ื ืœื™ ื”ื–ื“ืžื ื•ืช ืœื”ื‘ื™ืŸ ืžืฉื”ื• ืœื’ื‘ื™ ืžื’ื‘ืœื•ืช ื•ื“ื‘ืจื™ื ืฉืืคืฉืจ ืื• ืื™ ืืคืฉืจ ืœื”ืกืชืžืš ืขืœื™ื”ื, ื•ื’ื ืœื’ื‘ื™ ื”ืชื™ืขื•ื“ ื•ืื™ืš ืœืงืจื•ื ื•ืœื”ื‘ื™ืŸ ืื•ืชื•. ื›ืฉืื ื—ื ื• ื ืชืงืœื™ื ื‘ื›ื–ื” ื‘ืื’, ื”ื“ื‘ืจ ื”ื—ื›ื ืœืขืฉื•ืช ื”ื•ื ืœื—ื–ื•ืจ ืœืชื™ืขื•ื“ ื•ืœื—ืคืฉ ื›ืžื” ืฉื™ื•ืชืจ ืจืžื–ื™ื ืฉืืคืฉืจ ื”ื™ื” ืœื”ื‘ื™ืŸ ืžื”ื ืžื” ื”ื—ื•ื–ื” ื”ืืžื™ืชื™ ืฉืœ ื” API ื•ืขืœ ืžื” ืžื•ืชืจ ื•ืืกื•ืจ ืœื”ืกืชืžืš. ืื™ื ื˜ื•ืื™ืฆื™ื” ื˜ื•ื‘ื” ื™ื•ืชืจ ื”ื™ื ืื—ืช ื”ื“ืจื›ื™ื ืœื”ืคื•ืš ืœืžืคืชื—ื™ื ื˜ื•ื‘ื™ื ื™ื•ืชืจ.