uz
Feedback
ToCode

ToCode

Kanalga Telegramโ€™da oโ€˜tish

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

Ko'proq ko'rsatish
1 419
Obunachilar
Ma'lumot yo'q24 soatlar
Ma'lumot yo'q7 kunlar
Ma'lumot yo'q30 kunlar
Postlar arxiv
ToCode
1 419
http://localhost:3000/ http://localhost:3000/about http://localhost:3000/contact ืชื•ื›ืœื• ืœืฉื™ื ืœื‘ ืฉื›ืœ ื›ื ื™ืกื” ืœื“ืฃ ืžื—ืœื™ืฃ ืืช ืงื•ืžืคื•ื ื ื˜ืช Routes ื‘ืงื•ืžืคื•ื ื ื˜ื” ืฉืžืชืื™ืžื” ืœื›ืชื•ื‘ืช, ื•ืœื›ืŸ ืื ื™ ืžืงื‘ืœ ืชืžื™ื“ ืืช ืฉื•ืจืช ื”ื›ื•ืชืจืช ื•ืžืชื—ืชื™ื” ืคืขืžื™ื™ื ืืช ื”ืงื•ืžืคื•ื ื ื˜ื” ื”ืจืืฉื™ืช ืฉืœ ื”ื“ืฃ. ## ืžืขื‘ืจ ื‘ื™ืŸ ื“ืคื™ื ื›ืฉืื ื—ื ื• ืขื•ื‘ืจื™ื ื‘ื™ืŸ ื“ืคื™ื ื‘ืืžืฆืขื•ืช ืฉื™ื ื•ื™ ืฉื•ืจืช ื”ื›ืชื•ื‘ืช ื‘ื“ืคื“ืคืŸ ืื• ื‘ืืžืฆืขื•ืช ืืœืžื ื˜ a, ื”ื“ืคื“ืคืŸ ืคื•ื ื” ืžื—ื“ืฉ ืœืฉืจืช ื•ื˜ื•ืขืŸ ืืช ื”ืขืžื•ื“ ืฉืžืชืื™ื ืœื›ืชื•ื‘ืช ื”ื—ื“ืฉื”. ื‘ื’ืœืœ ืฉื”ืฉืจืช ื”ื•ื ืฉืจืช ืคื™ืชื•ื— ืฉืœ create-react-app, ื”ืฉืจืช ื”ื–ื” ื™ื•ื“ืข ืœื”ื’ื™ืฉ ืชืžื™ื“ ืืช ืื•ืชื• ืงื•ื‘ืฅ HTML, ื•ืœื›ืŸ ืื ื—ื ื• ืžืงื‘ืœื™ื ืืช ืื•ืชื” ืืคืœื™ืงืฆื™ื” ื‘ืขืžื•ื“ ืฉืžืชืื™ื ืœื›ืชื•ื‘ืช ื”ื—ื“ืฉื”. ืื‘ืœ ื–ื” ืžื ื’ื ื•ืŸ ื‘ื–ื‘ื–ื ื™ - ื”ืจื™ ื™ืฉ ืœื™ ื›ื‘ืจ ื‘ื“ืคื“ืคืŸ ืืช ื›ืœ ื”ืงื•ืžืคื•ื ื ื˜ื•ืช ื•ื›ืœ ื”ืžื™ื“ืข ืฉืฆืจื™ืš ื‘ืฉื‘ื™ืœ ืœื”ืฆื™ื’ ืืช ื”ืขืžื•ื“ ื”ื‘ื, ื‘ืฉื‘ื™ืœ ืžื” ืœื™ ืœืœื›ืช ืฉื•ื‘ ืœืฉืจืช ืจืง ื›ื“ื™ ืœืงื‘ืœ ืืช ืื•ืชื ืงื‘ืฆื™ js, css ื• html ืฉื›ื‘ืจ ื™ืฉ ืœื™? ืงื•ืžืคื•ื ื ื˜ื” ืžื™ื•ื—ื“ืช ืฉืœ react-router ื‘ืฉื Link ืžืฆื™ืขื” ื‘ื“ื™ื•ืง ืืช ื”ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื”ื–ื•. ื”ื™ื ืžืงื‘ืœืช ืžืืคื™ื™ืŸ to ืฉืื•ืžืจ ืœืื™ื–ื” ื›ืชื•ื‘ืช ืฆืจื™ืš ืœืขื‘ื•ืจ, ื•ืžืฉื ื” ืจืง ืืช ื”ื›ืชื•ื‘ืช ื‘ื“ืคื“ืคืŸ ื•ืืช ื”ืงื•ืžืคื•ื ื ื˜ื” ืฉืžื•ืฆื’ืช, ื‘ืœื™ ืœืขื‘ื•ืจ ื“ืจืš ื”ืฉืจืช. ื ืขื“ื›ืŸ ืืช ื”ืขืžื•ื“ ืฉืœื ื• ืขื ืฉืชื™ ืฉื•ืจื•ืช ื ื™ื•ื•ื˜ ื›ื“ื™ ืœื”ืžื—ื™ืฉ ืืช ื”ื”ืชื ื”ื’ื•ืช ืฉืœ Link:
function App() {
  return (
    <BrowserRouter>
      <h1>Welcome To React Router</h1>
      <nav>
        <h2>Navigation with &lt;Link/&gt; Component</h2>
        <Link to="/">Home Page</Link>
        <Link to="/about">About Page</Link>
        <Link to="/contact">Contact Page</Link>
      </nav>
      <nav>
        <h2>Navigation with &lt;a/&gt; Tag</h2>
        <a href="/">Home Page</a>
        <a href="/about">About Page</a>
        <a href="/contact">Contact Page</a>
      </nav>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/about" element={<About />} />
        <Route path="/contact" element={<Contact />} />
      </Routes>
    </BrowserRouter>
  );
}
ืฉื™ืžื• ืœื‘ ืื™ืš ื›ืฉืื ื™ ืขื•ื‘ืจ ื‘ื™ืŸ ื”ื“ืคื™ื ืขื ื” Link ื”ืžืขื‘ืจ ื”ื•ื ื—ืœืง, ืื‘ืœ ื›ืฉืื ื™ ืขื•ื‘ืจ ื‘ืืžืฆืขื•ืช ืœื—ื™ืฆื” ืขืœ ื” a ืื ื™ ืจื•ืื” ื‘ื“ืคื“ืคืŸ ื˜ืขื™ื ื” ืžื—ื“ืฉ ืฉืœ ื”ืขืžื•ื“. ## ืื™ืš ืจื™ืืงื˜ ืจืื•ื˜ืจ ืคื•ืชืจืช ื—ืœืง ืžื”ื‘ืขื™ื•ืช ืฉืœื ื• ืจื™ืืงื˜ ืจืื•ื˜ืจ ืœื ืคื•ืชืจ ืืช ื›ืœ ื”ืืชื’ืจื™ื ืฉื“ื™ื‘ืจื ื• ืขืœื™ื”ื ื‘ืชื—ื™ืœืช ื”ืฉื™ืขื•ืจ, ืื‘ืœ ื”ื•ื ื›ืŸ ืขื•ื–ืจ ืขื ื—ืœืงื: 1. ืจื™ืืงื˜ ืจืื•ื˜ืจ ืžื˜ืคืœ ื‘ืฉื‘ื™ืœื ื• ื‘ื›ืœ ื ื•ืฉื ื”ื”ื™ืกื˜ื•ืจื™ื” ื•ืืคืฉืจื•ืช ื”ื—ื–ืจื” ืื—ื•ืจื” ืžื”ื“ืคื“ืคืŸ ืžืื—ืจ ื•ื›ืœ ื“ืฃ ืคื ื™ืžื™ ืžืงื‘ืœ URL ืžืฉืœื•. 2. ื‘ืืžืฆืขื•ืช ืžื ื’ื ื•ืŸ Lazy ืฉืœ ืจื™ืืงื˜, ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื˜ืขื•ืŸ ืจืง ืืช ื”ืงื•ืžืคื•ื ื ื˜ื•ืช ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื ื‘ืฉื‘ื™ืœ ืœื”ืฆื™ื’ ืืช ื”ื ืชื™ื‘ ื”ื ื•ื›ื—ื™ ื•ืœื ื—ื™ื™ื‘ื™ื ืœืฉืœื•ื— ืืช ื›ืœ ื”ืืคืœื™ืงืฆื™ื” ืžืจืืฉ. ืื ืืชื ืจื•ืฆื™ื ืœืฉืžื•ืข ืขื•ื“ ืขืœ ืžื ื’ื ื•ืŸ Lazy ืฉืœ ืจื™ืืงื˜ ืชื•ื›ืœื• ืœืฆืคื•ืช ื‘ืฉื™ืขื•ืจ ื”ื”ืจื—ื‘ื” ืขืœ ื”ื ื•ืฉื. 3. ืจื™ืืงื˜ ืจืื•ื˜ืจ ืชื•ืžืš ื‘ Server Side Rendering. ืคื™ืฆ'ืจ ื–ื” ื”ื•ื ืžืขื‘ืจ ืœื”ื™ืงืฃ ืฉืœ ืงื•ืจืก ื–ื” ืžืื—ืจ ื•ื”ื•ื ืžืขืจื‘ ืฉื™ื ื•ื™ ืงื•ื“ ื‘ืฆื“ ื”ืฉืจืช. ื‘ื’ื“ื•ืœ ืžื” ืฉ SSR ืื•ืžืจ ื–ื” ืฉืื ื—ื ื• ืžื™ื™ืฆืจื™ื ืืช ื›ืœ ื” HTML ื‘ืฉืจืช ืœืคื ื™ ืฉืฉื•ืœื—ื™ื ืื•ืชื• ืœืœืงื•ื— (ื‘ืขืฆื ืžืจื™ืฆื™ื ืจื™ืืงื˜ ื‘ืฆื“ ื”ืฉืจืช ื•ืœื ื‘ื“ืคื“ืคืŸ). ืฉื™ืœื•ื‘ SSR ื™ืืคืฉืจ ืœื™ื™ืฆืจ HTML ืคืฉื•ื˜ ืœืœืงื•ื—ื•ืช ืฉืฆืจื™ื›ื™ื ืื•ืชื• ื›ื“ื•ื’ืžืช ืงื•ืจืื™ ืžืกืš ื•ืžื ื•ืขื™ ื—ื™ืคื•ืฉ. ## ื‘ื•ื ื•ืก: ืื™ืš ืœื—ื‘ืจ ืืคืœื™ืงืฆื™ื™ืช React Router ืœืฉืจืช Node.JS ืืžื™ืชื™ ื‘ืขื‘ื•ื“ื” ืขื ืฉืจืช ืืžื™ืชื™ ื‘ื“ืจืš ื›ืœืœ ื ืฆื˜ืจืš ืœื”ื’ื“ื™ืจ ืœื›ืœ ื ืชื™ื‘ ืื™ื–ื” ื“ืฃ HTML ืœื”ื’ื™ืฉ ื‘ืื•ืชื• ื ืชื™ื‘. ืื ื”ืฉืจืช ืฉืœื›ื ื›ืชื•ื‘ ื‘ Node.JS ืื•ืœื™ ืืชื ืžืฉืชืžืฉื™ื ื‘ืžื™ื“ืœื•ื•ืจ ื›ื“ื™ ืœื”ื’ื™ืฉ ืงื‘ืฆื™ื ืกื˜ื˜ื™ื™ื ืžืชื™ืงื™ื™ืช public ืœืคื™ ืฉื ื”ืงื•ื‘ืฅ ืฉืžืชืื™ื ืœื ืชื™ื‘ ืืœื™ื• ื ื™ืกื• ืœื’ืœื•ืฉ. ื”ื‘ืขื™ื” ืฉื›ืฉืžื—ื‘ืจื™ื ืืช ื–ื” ืœ react-router ื–ื” ืœื ืขื•ื‘ื“ ื›ืœ ื›ืš ื˜ื•ื‘ - ืจื™ืืงื˜ ืจืื•ื˜ืจ ื“ื•ืจืฉ ืฉื‘ื›ื ื™ืกื” ืœื›ืœ ื ืชื™ื‘ ื‘ืืคืœื™ืงืฆื™ื” ื ืงื‘ืœ ืชืžื™ื“ ืืช ืื•ืชื• ืงื•ื‘ืฅ html ื•ืืช ืื•ืชื ืงื‘ืฆื™ js ื• css, ื•ื”ื•ื ื›ื‘ืจ ื‘ืฆื“ ืœืงื•ื— ื™ื“ืื’ ืœื”ืจืื•ืช ืืช ื”ืงื•ืžืคื•ื ื ื˜ื” ื”ืžืชืื™ืžื”. ื‘ืฉืจืช Node.JS ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœืงื‘ืœ ืืช ื”ื”ืชื ื”ื’ื•ืช ื”ื–ืืช ื‘ืืžืฆืขื•ืช ื”ื’ื“ืจืช ื ืชื™ื‘ ื›ื–ื”:
app.get('/*', function(req, res) {
  res.sendFile(path.join(__dirname, 'path/to/your/index.html'), function(err) {
    if (err) {
      res.status(500).send(err)
    }
  })
})

ToCode
1 419
# ืžื‘ื•ื ืœ React Router ื’ื™ืจืกื” 6 ื‘ืขื•ืœื ื”ื™ืฉืŸ ืฉืœ ืคื™ืชื•ื— ื•ื•ื‘, ืœื›ืœ ื“ืฃ ื‘ืืชืจ ื”ื™ืชื” ื›ืชื•ื‘ืช (URL) ืžืฉืœื•, ื•ื“ืฃ HTML ืฉื”ืฉืจืช ืฉื•ืœื— ื›ืฉื’ื•ืœืฉ ื ื›ื ืก ืœืื•ืชื” ื›ืชื•ื‘ืช. ื‘ืจื™ืืงื˜, ื•ื‘ืžื™ื•ื—ื“ ืื ื™ืฆืจืชื ืืช ื”ืืคืœื™ืงืฆื™ื” ืขื create-react-app, ื–ื” ืงืฆืช ื™ื•ืชืจ ืงืฉื” ืœื™ื™ืฉื•ื. ืื ื”ื™ื™ื ื• ืจื•ืฆื™ื ืœืœื›ืช ื‘ื“ืจืš ื–ื•, ื–ื” ื”ื™ื” ืื•ืžืจ ืฉืฆืจื™ืš ืืคืœื™ืงืฆื™ื™ืช ืจื™ืืงื˜ ื—ื“ืฉื” ืขื‘ื•ืจ ื›ืœ ื“ืฃ ื‘ื’ืœืœ ืฉ create-react-app ืžื™ื™ืฆืจ ืจืง ืงื•ื‘ืฅ HTML ืื—ื“. ืื‘ืœ ืืคื™ืœื• ืื ื ืฆืœื™ื— ืœื™ื™ืฆืจ ื›ืžื” ืงื‘ืฆื™ HTML, ื”ื ื™ื”ื•ืœ ืฉืœ ื›ืœ ื”ืขืกืง ื”ื–ื” ืœื ืฉื•ื•ื” ืืช ื”ืžืืžืฅ. ื‘ืžืงื•ื ื–ื” ื”ื“ืจืš ื”ืžืงื•ื‘ืœืช ืœืขื‘ื•ืจ ื‘ื™ืŸ ื“ืคื™ื ื ืงืจืืช Single Page Application. ื”ืจืขื™ื•ืŸ ืฉื™ืฉ ืœื ื• ืจืง ืงื•ื‘ืฅ HTML ืื—ื“ ืขื ืกื˜ ืื—ื“ ืฉืœ ืงื•ืžืคื•ื ื ื˜ื•ืช ืจื™ืืงื˜, ื•ืงื•ื“ ืจื™ืืงื˜ ื™ื•ื“ืข ืœื”ืฆื™ื’ ืืช ื”ืงื•ืžืคื•ื ื ื˜ื” ืฉืžืชืื™ืžื” ืœ URL ื”ื ื•ื›ื—ื™. ืกืคืจื™ื™ืช react-router, ืขืœื™ื” ื ืœืžื“ ื‘ืคืจืง ื–ื”, ืžืกืคืงืช ื“ืจืš ืงืœื” ืœื‘ื ื™ื™ืช ื™ื™ืฉื•ืžื™ื ื›ืืœื” ื‘ืจื™ืืงื˜. ## ื”ืืชื’ืจื™ื ื‘ื™ื™ืฉื•ืžื™ ืขืžื•ื“ ื™ื—ื™ื“ ืœืคื ื™ ืฉื ืจืื” ืื™ืš ื›ื•ืชื‘ื™ื ื™ื™ืฉื•ื Single Page, ืื•ืœื™ ืืชื ื›ื‘ืจ ืฉื•ืืœื™ื ืืช ืขืฆืžื›ื ื‘ืฉื‘ื™ืœ ืžื” ืฆืจื™ืš ืกืคืจื™ื” ืžื™ื•ื—ื“ืช? ืœืžื” ื–ื” ื›ืœ ื›ืš ืงืฉื”? ืื– ื”ื ื” ืจืฉื™ืžืช ืืชื’ืจื™ื ืฉื‘ืœื™ React Router ื”ื™ื™ืชื ืฆืจื™ื›ื™ื ืœืคืชื•ืจ ืœื‘ื“: 1. ื˜ืขื™ื ืช ื”ื“ืฃ ื”ืจืืฉื•ืŸ ื‘ื™ื™ืฉื•ื ืขืฉื•ื™ื” ืœื”ื™ื•ืช ืื™ื˜ื™ืช, ื›ื™ ื›ืœ ืชื•ื›ืŸ ื”ืืชืจ (ื›ืœ ื”ืงื•ืžืคื•ื ื ื˜ื•ืช) ืžื’ื™ืข ื‘ืžื›ื” ืื—ืช. 2. ื“ืคื“ืคื ื™ื ื™ื•ื“ืขื™ื ืœื˜ืคืœ ืื•ื˜ื•ืžื˜ื™ืช ื‘ื ื™ื•ื•ื˜ ืื—ื•ืจื” ื•ืฉืžื™ืจืช ื”ื™ืกื˜ื•ืจื™ื” ื‘ื™ืŸ ื“ืคื™ื, ืื‘ืœ ื‘ื™ื™ืฉื•ืžื™ ืขืžื•ื“ ื™ื—ื™ื“ ืขืœื™ื ื• ืœื‘ื ื•ืช ืžื ื’ื ื•ื ื™ื ื›ืืœื” ืœื‘ื“ (ืื• ืœื”ืฉืชืžืฉ ื‘ืกืคืจื™ื•ืช ืงื™ื™ืžื•ืช) ื›ื“ื™ ืœืชืช ืœืžืฉืชืžืฉื™ื ืืช ืื•ืชื” ื—ื•ื•ื™ื”. ื‘ื ื•ืกืฃ ื‘ื™ื™ืฉื•ืžื™ ืขืžื•ื“ ื™ื—ื™ื“ ื™ืฉ ืขื•ื“ ืžืกืคืจ ืืชื’ืจื™ื ืฉืกืคืจื™ื™ืช react-router ืœื ืคื•ืชืจืช ื‘ืฉื‘ื™ืœื›ื ื•ื›ื“ืื™ ืœื”ื™ื•ืช ืžื•ื“ืขื™ื ืืœื™ื”ื: 1. ื”ืชืืžื” ืœืžื ื•ืขื™ ื—ื™ืคื•ืฉ ืขืฉื•ื™ื” ืœื”ื™ื•ืช ืžื•ืจื›ื‘ืช, ื›ื™ื•ื•ืŸ ืฉืจืง ืื—ืจื™ ื”ืคืขืœืช ืงื•ื“ JavaScript ืืคืฉืจ ืœื“ืขืช ืžื” ืœื”ืฆื™ื’. ืœื ื›ืœ ืžื ื•ืขื™ ื”ื—ื™ืคื•ืฉ ื™ื•ื“ืขื™ื JavaScript ื•ืœื›ืŸ ืœื—ืœืงื ื™ื”ื™ื” ืงืฉื” ืœื ื•ื•ื˜ ื‘ืืชืจ. 2. ื”ืชืืžื” ืœืงื•ืจืื™ ืžืกืš ืื• ื”ืชืงื ื™ ื ื’ื™ืฉื•ืช ืื—ืจื™ื ื™ื›ื•ืœื” ืœื”ื™ื•ืช ืžื•ืจื›ื‘ืช, ื›ื™ื•ื•ืŸ ืฉื—ื™ื™ื‘ื™ื ืœื”ืจื™ืฅ ืงื•ื“ JavaScript ื›ื“ื™ ืœื ื•ื•ื˜ ื‘ืืชืจ ื•ื”ืชืงื ื™ื ืืœื” ืœื ืชืžื™ื“ ื™ื•ื“ืขื™ื ืœื”ืจื™ืฅ JavaScript ื›ืžื• ืฉืฆืจื™ืš. 3. ื–ืœื™ื’ื•ืช ื–ื™ื›ืจื•ืŸ ื‘ JavaScript ื”ื•ืคื›ื•ืช ืœื‘ืขื™ื” ืืžื™ืชื™ืช: ื‘ื™ื™ืฉื•ื ืจื’ื™ืœ ื›ืœ ืžืขื‘ืจ ืขืžื•ื“ ืžืืคืก ืืช ื”ื–ื™ื›ืจื•ืŸ ื•ืœื›ืŸ ื’ื ืื ื—ืœืง ืžื”ืงื•ื“ ืฉืœื›ื ืœื ืžื”ื•ื“ืง ืขื“ ื”ืกื•ืฃ ื”ื–ืœื™ื’ื” ืœื ืชืขืฉื” ื ื–ืง. ื‘ื™ื™ืฉื•ื ืขืžื•ื“ ื™ื—ื™ื“ ืื•ื‘ื™ืงื˜ ื‘ื–ื™ื›ืจื•ืŸ ื™ื›ื•ืœ ืœื’ื“ื•ืœ ื•ืœื’ื“ื•ืœ ืœืื•ืจืš ื›ืœ ื—ื™ื™ ื”ื™ื™ืฉื•ื, ืฉื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ืžืื•ื“ ืืจื•ื›ื™ื. ื‘ื•ืื• ื ืชืงื“ื ืœ react-router ื•ื ืจืื” ืื™ืš ื”ื™ื ืขื•ื–ืจืช ืœื ื• ืœื›ืชื•ื‘ ื™ื™ืฉื•ืžื™ Single Page ื‘ืงืœื•ืช. ## ืื™ืš ืขื•ื‘ื“ React Router ื‘ React Router ืื ื—ื ื• ืžื’ื“ื™ืจื™ื ื˜ื‘ืœืช ื ื™ืชื•ื‘, ืฉื–ื• ื˜ื‘ืœื” ืฉืื•ืžืจืช ืœ react-router ืขื‘ื•ืจ ื›ืœ ื ืชื™ื‘ ืื™ื–ื” ืงื•ืžืคื•ื ื ื˜ื” ืฆืจื™ืš ืœื”ืฆื™ื’. ืืช ื”ื˜ื‘ืœื” ืื ื—ื ื• ื›ื•ืชื‘ื™ื ื‘ืชื•ืจ ืงื•ืžืคื•ื ื ื˜ื•ืช ืจื™ืืงื˜, ื• react-router "ืžื—ืœื™ืฃ" ืืช ื›ืœ ื‘ืœื•ืง ื”ืงื•ืžืคื•ื ื ื˜ื•ืช ื”ื–ื” ื‘ืงื•ืžืคื•ื ื ื˜ื” ื”ืืžื™ืชื™ืช ืฉืฆืจื™ืš ืœื”ืจืื•ืช ืขื‘ื•ืจ ื”ื ืชื™ื‘ ื”ื ื•ื›ื—ื™. ืืคืฉืจ ืœื“ืžื™ื™ืŸ ืืช ื”ื”ืชื ื”ื’ื•ืช ืฉืœื• ื‘ืชื•ืจ switch/case ืžืชื•ื—ื›ื, ืฉืžืกืชื›ืœ ืขืœ ืฉื•ืจืช ื”ื›ืชื•ื‘ืช ื•ืขืœ ื˜ื‘ืœืช ื”ื ื™ืชื•ื‘, ื•ืœืคื™ ืžื” ืฉื›ืชื•ื‘ ืฉื ืžื—ืœื™ื˜ ืื™ื–ื” ืงื•ืžืคื•ื ื ื˜ื” ืœื”ืจืื•ืช. ื›ืš ื ืจืื™ืช ื˜ื‘ืœืช ื ื™ืชื•ื‘ ืคืฉื•ื˜ื”:
<BrowserRouter>
  <Routes>
    <Route path="/" element={<Home />} />
    <Route path="/about" element={<About />} />
    <Route path="/contact" element={<Contact />} />
  </Routes>
</BrowserRouter>
ื ื ืกื” ืœืงืจื•ื ืืช ื–ื” ื™ื—ื“- 1. ืื ื”ื›ืชื•ื‘ืช ื‘ื“ืคื“ืคืŸ ื”ื™ื / ืื– ืชื—ืœื™ืฃ ืืช ื›ืœ ื”ื‘ืœื•ืง ืฉื‘ืชื•ืš Routes ื‘ืงื•ืžืคื•ื ื ื˜ื” Home. 2. ืื ื”ื›ืชื•ื‘ืช ื‘ื“ืคื“ืคืŸ ื”ื™ื /about ืื– ืชื—ืœื™ืฃ ืืช ื›ืœ ื”ื‘ืœื•ืง ืฉื‘ืชื•ืš Routes ื‘ืงื•ืžืคื•ื ื ื˜ื” About. 3. ืื ื”ื›ืชื•ื‘ืช ื‘ื“ืคื“ืคืŸ ื”ื™ื /contact ืื– ืชื—ืœื™ืฃ ืืช ื›ืœ ื”ื‘ืœื•ืง ืฉื‘ืชื•ืš Routes ื‘ืงื•ืžืคื•ื ื ื˜ื” Contact. ืืช ืงื•ืžืคื•ื ื ื˜ืช BrowserRouter ืื ื™ ืฆืจื™ืš ืœืฉื™ื ืคืขื ืื—ืช ื‘ื™ื™ืฉื•ื ืžืกื‘ื™ื‘ ืœื›ืœ ื”ืงื•ืžืคื•ื ื ื˜ื•ืช ืฉืœื™, ืื‘ืœ ืืช Routes ืื ื™ ื™ื›ื•ืœ ืœืฉื™ื ื‘ื›ืžื” ืžืงื•ืžื•ืช, ื•ื›ืœ ืžืงื•ื ื‘ื• ืื ื™ ืฉื Routes ื™ื•ื—ืœืฃ ื‘ืงื•ืžืคื•ื ื ื˜ื” ืฉืžืชืื™ืžื” ืœื ืชื™ื‘. ื”ื ื” ืงื•ื‘ืฅ App.js ืฉืžืžื—ื™ืฉ ืืช ื”ืžืฉื—ืง:
import './App.css';
import {
  BrowserRouter,
  Routes,
  Route,
} from "react-router-dom";

function App() {
  return (
    <>
      <h1>Welcome To React Router</h1>
      <BrowserRouter>
        <Routes>
          <Route path="/" element={<Home />} />
          <Route path="/about" element={<About />} />
          <Route path="/contact" element={<Contact />} />
        </Routes>
        <Routes>
          <Route path="/" element={<Home />} />
          <Route path="/about" element={<About />} />
          <Route path="/contact" element={<Contact />} />
        </Routes>
      </BrowserRouter>
    </>
  );
}

function Home() {
  return (<p>Home Page</p>);
}

function About() {
  return (<p>About Page</p>);
}

function Contact() {
  return (<p>Contact Page</p>);
}

export default App;
ื ืกื• ืœื”ืคืขื™ืœ ืืช ื”ื™ื™ืฉื•ื ื•ืœื”ื™ื›ื ืก ืœื›ืชื•ื‘ื•ืช:

ToCode
1 419
# ื”ื–ืžื ื” ืœื•ื•ื‘ื™ื ืจ - ื—ื™ื“ื•ืฉื™ื ื‘ืจื™ืืงื˜ 18 ื‘ื™ื•ื ื—ืžื™ืฉื™ ื”ืงืจื•ื‘ ื‘ืขืฉืจ ื‘ื‘ื•ืงืจ ืืขื‘ื™ืจ ืคื” ื•ื•ื‘ื™ื ืจ ืฉืœ ืฉืขื” ืขืœ ืจื™ืืงื˜ 18 ื•ื”ื—ื™ื“ื•ืฉื™ื ืฉื”ื•ื ืžื‘ื™ื. ืจื™ืืงื˜ 18 ื™ืฆื ื‘ืกื•ืฃ ืžืจืฅ ื•ื”ื’ื™ืจืกื” ื”ืขื“ื›ื ื™ืช ืฉืœ ืจื™ืืงื˜ ื”ื™ื ื›ื‘ืจ 18.2. ื”ื™ื™ืชืจื•ืŸ ื‘ืœื—ื›ื•ืช ืงืฆืช ืœืคื ื™ ืฉืขื•ืฉื™ื ื•ื•ื‘ื™ื ืจ ืขืœ ื’ื™ืจืกื” ื—ื“ืฉื” ื”ื•ื ืฉืขื›ืฉื™ื• ื™ื—ืกื™ืช ื‘ืจื•ืจ ืžื” ืขื•ื‘ื“, ืžื” ืœื ืขื•ื‘ื“ ื•ืžื” ื”ื›ื™ื•ื•ื ื™ื ืœืขืชื™ื“, ื•ื–ื” ืžื” ืฉื ืจืื” ื’ื ื‘ื•ื•ื‘ื™ื ืจ. ื‘ืชื•ื›ื ื™ืช: 1. ื ืจืื” ืžื”ื• useDeferredValue, ืื™ื–ื” ื‘ืขื™ื” ื”ื•ื ื‘ื ืœืคืชื•ืจ ื•ืื™ื–ื” ื‘ืขื™ื•ืช ื”ื•ื ื™ื•ืฆืจ. 2. ืžืžื ื• ื ื’ื™ืข ืœื“ื‘ืจ ืขืœ Concurrent Rendering, ืฉื–ื” ื”ืคื™ืฆ'ืจ ืฉืžืืคืฉืจ ืืช useDeferredValue ื•ื ืขื‘ื•ืจ ืขืœ ื”ื“ื•ื’ืžื” ืฉืœ useTransition ื›ื“ื™ ืœืจืื•ืช ืขื•ื“ ื™ื™ืชืจื•ืŸ ืฉืœ ื”ืจื™ื ื“ื•ืจ ื”ืžืงื‘ื™ืœื™. 3. ื ื“ื‘ืจ ืขืœ ื”ืงื•ืฉื™ ื‘ืขื‘ื•ื“ื” ืขื ืจื™ื ื“ื•ืจ ืžืงื‘ื™ืœื™, ื•ื ืจืื” ืืช ื”ื“ื•ื’ืžื” ืฉืœ Render Tearing. 4. ื ื“ื‘ืจ ืขืœ ื”ื”ืชื ื”ื’ื•ืช ื”ื—ื“ืฉื” ืฉืœ Strict Mode ืฉืขืœื•ืœื” ืœื‘ืœื‘ืœ ื‘ืžืฆื‘ ืคื™ืชื•ื—, ื•ืขืœ ื”ืฉื™ื ื•ื™ ื‘ื”ืชื ื”ื’ื•ืช ืฉืœ useEffect ืฉื•ื‘ ื‘ืขืงื‘ื•ืช ื” Concurrent Rendering. ื”ื•ื•ื‘ื™ื ืจ ื™ืขื‘ื•ืจ ื‘ื–ื•ื ื‘ื™ื•ื ื—ืžื™ืฉื™ ื‘ืขืฉืจ ื‘ื‘ื•ืงืจ. ื”ืงื™ืฉื•ืจ ืœืคืจื˜ื™ื ื•ื”ืจืฉืžื” ื”ื•ื: https://www.tocode.co.il/workshops/117 ืฉื•ื•ื” ืœื‘ื•ื ื›ื“ื™ ืฉืชื•ื›ืœื• ืœืฉืื•ืœ ืฉืืœื•ืช ื•ืœื”ืฉืชืชืฃ ื‘ืฉื™ื—ื”, ืื‘ืœ ืื ืœื ืชื•ื›ืœื• ืœื”ื’ื™ืข ื–ื” ืœื ืกื•ืฃ ื”ืขื•ืœื ื•ื”ืงืœื˜ื” ืžืกื•ื“ืจืช ืชืขืœื” ืœืืชืจ ื•ืœื™ื•ื˜ื™ื•ื‘ ื›ืžื” ื™ืžื™ื ืื—ืจื™ ื”ืžืคื’ืฉ. ื ืชืจืื” ื‘ื—ืžื™ืฉื™, ื™ื ื•ืŸ

ToCode
1 419
# ืจื™ืืงื˜ 18 ืกื•ืฃ ืกื•ืฃ ืžืฆื™ืข ืคื™ืชืจื•ืŸ ืœื‘ืขื™ื™ืช ื” label-ื™ื ืขื“ ืฉื”ื’ื™ืข ืจื™ืืงื˜ ืื• ื‘ื›ืœืœ ื”ืจืขื™ื•ืŸ ืฉืœ ืงื•ืžืคื•ื ื ื˜ื•ืช, ืžืชื›ื ืชื™ื ื•ืžืชื›ื ืชื•ืช ื›ืชื‘ื• ืงื‘ืฆื™ HTML ื’ื“ื•ืœื™ื ื•ื‘ืชื•ื›ื ื”ื™ื• label-ื™ื ื• input-ื™ื ื”ืžืชื•ืืžื™ื ื‘ื™ื ื™ื”ื ื‘ืืžืฆืขื•ืช id:
<label for="name">User Name</label>
<input type="text" id="name" />
ื•ืื– ื‘ื ืจื™ืืงื˜ ื•ืœื™ืžื“ ืื•ืชื ื• ืฉืœื ื›ื“ืื™ ืœื”ืฉืชืžืฉ ื‘ id ืขืœ ืืœืžื ื˜ื™ื ื›ื™ ืื•ืœื™ ืžื™ืฉื”ื• ื”ื•ืœืš ืœื”ืฉืชืžืฉ ื‘ืงื•ืžืคื•ื ื ื˜ื” ืฉืœืš ื‘ืขื•ื“ ื›ืžื” ืžืงื•ืžื•ืช ื•ืื– ื™ื”ื™ื” ื‘ืžืกืžืš id ื›ืคื•ืœ. ืžืคื” ืžืชื›ื ืชื™ื ื•ืžืชื›ื ืชื•ืช ื”ืชื—ื™ืœื• ืœื—ืคืฉ ืคื™ืชืจื•ื ื•ืช ื™ืฆื™ืจืชื™ื™ื, ื”ื—ืœ ืž:
<label>
User Name
<input type="text" />
</label>
ื•ืขื“ ื“ื‘ืจื™ื ื™ื•ืชืจ ืžืชื•ื—ื›ืžื™ื ื›ืžื• ื”ืžืฆืืช ืžื–ื”ื™ื:
function MyForm() {
    const id = Math.random().toString(16);
    return (
        <>
            <label htmlFor={id}>User Name</label>
            <input type="text" id={id} />
        </>
    );
}
ื”ื‘ืขื™ื” ื‘ืคื™ืชืจื•ืŸ ื”ืจืืฉื•ืŸ ื”ื™ื ืฉื”ื•ื ืžื›ืจื™ื— markup ืžืกื•ื™ื. ื›ืœ ืขื•ื“ ื–ื” ืขื•ื‘ื“ ืœื›ื ื”ื›ืœ ื˜ื•ื‘, ืื‘ืœ ืœืคืขืžื™ื ื‘ืืžืช ื” label ื•ื” input ืœื ืฆืžื•ื“ื™ื ืื—ื“ ืœืฉื ื™. ื”ื‘ืขื™ื” ื‘ืคื™ืชืจื•ืŸ ื”ืฉื ื™ ื”ื™ื ืฉื›ื ืจืื” ืœื ื ืงื‘ืœ ืืช ืื•ืชื• id ื‘ Server Side Rendering, ืžื” ืฉื™ื™ืฆื•ืจ ืื™ ืชืื™ืžื•ืช ื›ืฉืจื™ืืงื˜ ื™ืจื™ืฅ ืืช ื›ืœ ื” render-ื™ื ื‘ื“ืคื“ืคืŸ ื•ื™ืงื‘ืœ HTML ืขื ืžื–ื”ื™ื ืฉื•ื ื™ื. ืจื™ืืงื˜ 18 ืกื•ืฃ ืกื•ืฃ ืžืฆื™ืขื™ื ืคื™ืชืจื•ืŸ ืงืœ ื•ื ื•ื— ืœื‘ืขื™ื” ืขื ื”ื•ืง ื‘ืฉื useId. ืคื•ื ืงืฆื™ื” ื–ื• ืชื—ื–ื™ืจ ืžื–ื”ื” ื™ื™ื—ื•ื“ื™ ื•ืชื‘ื˜ื™ื— ืœื›ื ืฉืชืงื‘ืœื• ืืช ืื•ืชื• ืžื–ื”ื” ื‘ืจื™ื ื“ื•ืจ ื‘ืฆื“ ืฉืจืช ื•ื‘ืฆื“ ื”ืœืงื•ื—. ืœื›ืŸ ื”ื“ืจืš ื”ื ื›ื•ื ื” ื‘ืจื™ืืงื˜ 18 ืœื›ืชื•ื‘ ืืช ืื•ืชื• ืงื•ื“ ื”ื™ื:
import { useId } from 'react';

function MyForm() {
    const id = useId();
    return (
        <>
            <label htmlFor={id}>User Name</label>
            <input type="text" id={id} />
        </>
    );
}
ื” id ืฉืžืงื‘ืœื™ื ืœื ื™ืฆื™ืจืชื™ ื‘ืžื™ื•ื—ื“ ื•ื‘ื“ื•ื’ืžื” ืฉื ื™ืกื™ืชื™ ืงื™ื‘ืœืชื™ ืžื—ืจื•ื–ืช ื›ืžื• :r1:, :r3 ื• :r5:. ืื ื™ ืœื ื™ื•ื“ืข ืœืžื” ื“ื•ื•ืงื r ื•ืœืžื” ื”ื•ื ืžื“ืœื’ ืขืœ ื”ื–ื•ื’ื™ื™ื. ืื ื™ืฉ ืœื›ื ืจืขื™ื•ืŸ ืื• ืžื™ื“ืข ืคื ื™ืžื™ ืืฉืžื— ืœืฉืžื•ืข ื‘ืชื’ื•ื‘ื•ืช.

ToCode
1 419
# ืžื•ื“ืœ ืžื ื˜ืืœื™ ืžื•ื“ืœ ืžื ื˜ืืœื™ ื–ื” ืžื” ืฉื™ืฉ ืœืš ื‘ืจืืฉ ืœืคื ื™ ืฉื”ืชื—ืœืช ืœืœืžื•ื“ ืžืฉื”ื•. ื•ื–ื” ื”ื“ื‘ืจ ืฉืงื•ื‘ืข ื›ืžื” ืืคืงื˜ื™ื‘ื™ ื™ื”ื™ื” ื”ืœื™ืžื•ื“. ืขื ื”ืžื•ื“ืœ ื”ืžื ื˜ืืœื™ ื”ื ื›ื•ืŸ, ืžืกืคื™ืงื•ืช ืขืฉืจ ื“ืงื•ืช ื‘ืฉื‘ื™ืœ ืœื“ืขืช ืœืขื‘ื•ื“ ืขื ื’ื™ื˜. ืขื ื”ืžื•ื“ืœ ื”ืžื ื˜ืืœื™ ื”ืœื ื ื›ื•ืŸ, ื’ื ื—ื•ื“ืฉ ืœื ื™ืขื–ื•ืจ. ื›ืฉืื ื™ ืœื•ืžื“ ื ื•ืฉื ื—ื“ืฉ, ืื• ื‘ืงื•ืจืกื™ื ืฉืื ื™ ืžืœืžื“, ืื ื™ ื™ื•ื“ืข ืœื—ืคืฉ ื•ืœื–ื”ื•ืช ืืช ืจื’ืข ื”"ืื”ื”!", ื”ืจื’ืข ื”ื–ื” ืฉื‘ื• ื“ื‘ืจื™ื ืคืชืื•ื ืžืกืชื“ืจื™ื ืื—ืจื™ ืฉื”ืจื‘ื” ื–ืžืŸ ื”ื™ื” ืงืฉื” ืœื”ื‘ื™ืŸ ืื•ืชื, ื”ืจื’ืข ื”ื–ื” ืฉื‘ื• ื”ืžื•ื“ืœ ื”ืžื ื˜ืืœื™ ืžืฉืชื ื” ื›ื“ื™ ืœื”ืชืื™ื ืœื ืชื•ื ื™ื ื”ื—ื“ืฉื™ื. ื–ื” ืจื’ืข ื”ืžืคืชื— ื‘ื“ืจืš ืœื”ื‘ื™ืŸ ื›ืœ ื ื•ืฉื ืฉืœื ื™ื”ื™ื”. ื”ืฉืืœื” ื”ืืžื™ืชื™ืช (ื‘ื›ืœ ืœื™ืžื•ื“), ื”ื™ื ืœื "ืžื” ืขื•ืฉื” ืคืงื•ื“ื” X ืื• Y", ืืœื "ืžื” ื”ืžื•ื“ืœ ื”ืžื ื˜ืืœื™ ืฉืื ื™ ืฆืจื™ืš ื›ื“ื™ ืœื”ื‘ื™ืŸ ืืช ื”ื›ืœื™ ื”ื–ื”".

ToCode
1 419
# ื”ื™ื•ื ืœืžื“ืชื™: ื”ืงืฉืจ ื‘ื™ืŸ globals ืœื ื™ืงื•ื™ ื” DOM ื‘ vitest ื™ืฉ ื™ืžื™ื ื‘ื”ื ืžื ื’ื ื•ืŸ ืฉื‘ื›ืœืœ ืœื ื—ืฉื‘ืช ืขืœื™ื• ืคืชืื•ื ืžื—ืœื™ื˜ ืœื”ื–ื›ื™ืจ ืœืš ืฉื”ื•ื ื“ื•ื•ืงื ื“ื™ ื—ืฉื•ื‘. ื›ืš ืงืจื” ืœื™ ื”ื™ื•ื ืขื ืžื ื’ื ื•ืŸ ื”ื–ืจืงืช ื”ื’ืœื•ื‘ืืœื™ื™ื ืฉืœ vitest. ื”ืžื ื’ื ื•ืŸ ื‘ื’ื“ื•ืœ ืื•ืžืจ ืฉืื ืชื“ืœื™ืงื• ืžืชื’ ื‘ืฉื globals ื‘ืงื•ื‘ืฅ ื”ืงื•ื ืคื™ื’ื•ืจืฆื™ื” ื‘ืฆื•ืจื” ื›ื–ืืช:
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [react()],
  test: {
    globals: true,
    environment: "jsdom",
  },
})
ืื– ื‘ื›ืœ ืงื‘ืฆื™ ื”ื‘ื“ื™ืงื•ืช ืฉืœื›ื ืชื•ื›ืœื• ืœื”ืกืชืžืš ืขืœ ื–ื” ืฉื™ืฉ describe, it ื• expect ื•ืื•ืœื™ ืขื•ื“ ื›ืžื” ืžืฉืชื ื™ื ื’ืœื•ื‘ืืœื™ื™ื. ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื false ื•ืื– ืฆืจื™ืš ืœื™ื™ื‘ื ื”ื›ืœ ืœื‘ื“ ืขื ืฉื•ืจื” ื›ื–ืืช ื‘ืชื—ื™ืœืช ืงื•ื‘ืฅ ื‘ื“ื™ืงื•ืช:
import { describe, it, expect } from 'vitest';
ืขื“ ืœืคื” ืื™ืŸ ืกื™ื‘ื” ืœื”ืชืจื’ืฉ, ืื‘ืœ ืžืกืชื‘ืจ ืฉืœื”ื–ืจืงืช ื” globals ื™ืฉ ืขื•ื“ ืืคืงื˜ ื•ื”ื•ื ื”ืจื‘ื” ื™ื•ืชืจ ืžื•ืจื’ืฉ: ื‘ืขืช ื‘ื“ื™ืงืช ืงื•ืžืคื•ื ื ื˜ื•ืช ืจื™ืืงื˜ ืขื react-testing-library, ื”ืกืคืจื™ื” ืชื ืงื” ืืช ื” DOM ื‘ื™ืŸ ื‘ื“ื™ืงื” ืœื‘ื“ื™ืงื” ืื ื” globals ืžื•ื–ืจืงื™ื, ืื‘ืœ ืœื ืชื ืงื” ื‘ืœืขื“ื™ื”ื. ื‘ืžื™ืœื™ื ืื—ืจื•ืช ื‘ืงื•ื‘ืฅ ื‘ื“ื™ืงื•ืช ื›ื–ื”:
import { describe, it, expect } from 'vitest';
import { screen, render } from '@testing-library/react';
import App from './App';

describe('App Changes Colors', () => {
  it('shows a button', () => {
    render(<App />);
    const btn = screen.getByRole('button', { name: '0' });
    expect(btn).toBeTruthy();
  });
  it('shows a button', () => {
    render(<App />);
    const btn = screen.getByRole('button', { name: '0' });
    expect(btn).toBeTruthy();
  });
});
ืื ื™ืฉ ื”ื–ืจืงืช ื’ืœื•ื‘ืืœื™ื™ื ื”ื›ืœ ืขื•ื‘ื“, ืื‘ืœ ื‘ืœืขื“ื™ื” ื”ื‘ื“ื™ืงื” ื”ืฉื ื™ื” ื ื›ืฉืœืช ื›ื™ getByRole ืชืงื•ืข ืขื ืฉื ื™ ื›ืคืชื•ืจื™ื ืขืœ ื”ืžืกืš, ืื—ื“ ืžื”ื‘ื“ื™ืงื” ืฉื”ื•ื ื™ืฆืจ ื•ื”ืฉื ื™ ืžื”ื‘ื“ื™ืงื” ื”ืจืืฉื•ื ื” ืฉืœื ื ืžื—ืง. ื”ืคื•ื ืงืฆื™ื” ื”ืจืœื•ื•ื ื˜ื™ืช ืž testing-library ืฉืžื˜ืคืœืช ื‘ืกื™ืคื•ืจ ื”ืžื—ื™ืงื” ื ืงืจืืช cleanup ื•ื–ื” ืžื” ืฉืžื•ืกื‘ืจ ื’ื ื‘ืชื™ืขื•ื“ ืฉืœื”:
    Please note that this is done automatically if the testing framework you're using supports the afterEach global and it is injected to your testing environment (like mocha, Jest, and Jasmine). If not, you will need to do manual cleanups after each test.
ืœื›ืŸ ืื ืืชื ืขื•ื‘ื“ื™ื ื‘ vitest ื‘ืœื™ ื”ื–ืจืงืช ื’ืœื•ื‘ืืœื™ื™ื ืชืฆื˜ืจื›ื• ืœื–ื›ื•ืจ ืœื”ืคืขื™ืœ ืืช cleanup ื‘ืขืฆืžื›ื. ืื‘ืœ ื™ื•ืชืจ ืงืœ ืคืฉื•ื˜ ืœื”ื“ืœื™ืง ืืช ื”ื–ืจืงืช ื”ื’ืœื•ื‘ืืœื™ื™ื ื•ืœื ืœื—ืฉื•ื‘ ืขืœ ื–ื” (ืขื“ ื”ืขืงื™ืฆื” ื”ื‘ืื”).

ToCode
1 419
# ื˜ื™ืค ืจื™ืืงื˜: ืื™ืš ืœื ืœื”ืฉืชืžืฉ ื‘ useDeferred ืžืฆื‘ Concurrent Mode ื”ื—ื“ืฉ ืฉืœ ืจื™ืืงื˜ ืคื•ืชื— ืื•ืคืฆื™ื” ืœื”ืจื‘ื” ืฉื™ืคื•ืจื™ ื‘ื™ืฆื•ืขื™ื, ืื‘ืœ ื›ืžื• ื›ืœ ืคื™ืฆ'ืจ ื—ื“ืฉ ื’ื ืงืœ ืœื”ืชื‘ืœื‘ืœ ื•ืœื”ืฉืชืžืฉ ื‘ื• ืœื ื ื›ื•ืŸ. ื ืชื‘ื•ื ืŸ ื‘ืงื•ื“ ื”ื‘ื:
function BrokenHugeList() {
  const [search, setSearch] = useState('');
  const deferredSearch = useDeferredValue(search, { timeoutMs: 5000 });

  function handleChange(e) {
    setSearch(e.target.value);
  }
  console.log(`1 seach = ${deferredSearch}`);
  const searchResults = items.filter(i => i.includes(deferredSearch));
  console.log('2');

  return (
    <div>
      <input type="text" value={search} onChange={handleChange} />
      <ul>
        {searchResults.map(i => <li key={i}>{i}</li>)}
      </ul>
    </div>
  );
}
ื”ืงื•ื“ ืžืฉืชืžืฉ ื‘ useDeferredValue ื‘ืžื˜ืจื” ืœืฉืคืจ ื‘ื™ืฆื•ืขื™ื. ื”ืžื—ืฉื‘ื” ื”ื™ื ืฉืžืฉืชืžืฉื™ื ื™ืงืœื™ื“ื• ื˜ืงืกื˜ ื‘ืชื™ื‘ื”, ื•ืื– ื™ื”ื™ื” render ื ื•ืกืฃ ืฉื‘ืขืงื‘ื•ืชื™ื• ื”ืžืขืจื›ืช ืชื ืกื” ืœืฆื™ื™ืจ ืขืœ ื”ืžืกืš ืืช ื”ืคืจื™ื˜ื™ื ืฉืžืชืื™ืžื™ื ืœื—ื™ืคื•ืฉ, ื•ืื– ื‘ืืžืฆืข ื”ืฆื™ื•ืจ ืžืฉืชืžืฉ ื™ืงืœื™ื“ ืขืจืš ืื—ืจ ื‘ืชื™ื‘ื” ื•ืจื™ืืงื˜ ื™ื•ื›ืœ ืœื”ืคืกื™ืง ืืช ื›ืœ ื”ืขื‘ื•ื“ื” ืฉืœื•, ืœื–ืจื•ืง ืœืคื— ืืช ืžื” ืฉื”ื•ื ืจืฆื” ืœืฆื™ื™ืจ ืขืœ ื”ืžืกืš ื•ืœื”ืชื—ื™ืœ ืžื—ื“ืฉ ืขื ื”ื˜ืงืกื˜ ื”ืžืขื•ื“ื›ืŸ. ื•ื–ื” ื‘ืืžืช ืžื” ืฉืงื•ืจื” ืจืง ืฉืฆืจื™ืš ืœื–ื›ื•ืจ ืฉืชื™ ื ืงื•ื“ื•ืช ืฉื‘ืกื•ืฃ ื™ื›ื•ืœื•ืช ืœืคืขื•ืœ ืœืจืขืชื ื•: 1. ื›ื“ื™ ืœื“ืขืช ืžื” ืœืฆื™ื™ืจ ื‘ื”ืชื—ืœื”, ืจื™ืืงื˜ ื›ืŸ ืžืคืขื™ืœ render ื ื•ืกืฃ ืขื ื”ืขืจืš ื”ื™ืฉืŸ ืฉืœ ื˜ืงืกื˜ ื”ื—ื™ืคื•ืฉ. ื–ื” ืื•ืžืจ ืฉื›ืฉื ืกืชื›ืœ ื‘ืžืกืš ื›ืœื™ ื”ืคื™ืชื•ื— ืื ื—ื ื• ื ืจืื” ืืช ื”ื”ื“ืคืกื” ืฉืœ 1 ื•-2 ืžื•ืคื™ืขื” ืคืขืžื™ื™ื ืื—ืจื™ ื›ืœ ืฉื™ื ื•ื™ ื˜ืงืกื˜, ืคืขื ืื—ืช ืขื ื”ื˜ืงืกื˜ ื”ื™ืฉืŸ ื•ืคืขื ืฉื ื™ื” ืขื ื”ื—ื“ืฉ. 2. ืจื™ืืงื˜ ื‘ื›ืœ ืžืงืจื” ืœื ืงื•ืกื ื•ืœื ื™ืฆืœื™ื— "ืœืขืฆื•ืจ ื‘ืืžืฆืข" ืืช ืœื•ืœืืช ื” filter ืฉืื ื™ ื›ืชื‘ืชื™. ื‘ื’ืœืœ ื–ื” ื›ืฉื”ืจืฉื™ืžื” ืžืกืคื™ืง ื’ื“ื•ืœื” ืื• ืฉืจื•ื‘ ื”ืขื‘ื•ื“ื” ื”ื™ื ื—ื™ืฉื•ื‘ื™ืช, ืื ื—ื ื• ืขื“ื™ื™ืŸ ื ืจืื” lag-ื™ื. ืฉื™ืœื•ื‘ ืฉืชื™ ื”ื‘ืขื™ื•ืช ืื•ืžืจ ืฉืื ื™ืฉ ืœื ื• ืœื•ื’ื™ืงื” ืžืกื•ื‘ื›ืช, ืœื ืจืง ืฉ useDeferredValue ืœื ื™ืขื–ื•ืจ ื”ื•ื ืืคื™ืœื• ื™ื–ื™ืง. ื‘ื’ืœืœ ืฉืื•ืชื” ืœื•ื’ื™ืงื” ืžืกื•ื‘ื›ืช ืชื•ืคืขืœ ืคืขืžื™ื™ื: ืคืขื ืื—ืช ืขื ื”ืกื˜ื™ื™ื˜ ื”ื™ืฉืŸ ื•ืคืขื ืฉื ื™ื” ืขื ื”ื—ื“ืฉ. ืคื™ืชืจื•ืŸ ืื—ื“ ืœื”ืคืขืœื” ื”ื›ืคื•ืœื” ื”ื•ื ืœื”ืฉืชืžืฉ ื‘ Memo, ืœื“ื•ื’ืžื” ื”ืงื•ื“ ื”ื‘ื ืœื ืกื•ื‘ืœ ืžื‘ืขื™ื™ืช ืจื ื“ืจ ื›ืคื•ืœ ื•ื ื•ืชืŸ ืชื•ืฆืื” ืงืฆืช ื™ื•ืชืจ ืžื”ื™ืจื”:
const HugeList = React.memo(function HugeList(props) {
  const { search } = props;
  console.log(`3, search = ${search}`);
  const searchResults = items.filter(i => i.includes(search));
  console.log('4');

  return (
    <div>
      <ul>
        {searchResults.map(i => <li key={i}>{i}</li>)}
      </ul>
    </div>
  );
});

function App() {
  const [search, setSearch] = useState('');
  const deferredSearch = useDeferredValue(search, { timeoutMs: 5000 });

  function handleChange(e) {
    setSearch(e.target.value);
  }

  return (
    <>
      <input type="text" value={search} onChange={handleChange} /> 
      <HugeList search={deferredSearch} />
      <hr />
    </>
  );
}
ื .ื‘. ื’ื ืื—ืจื™ ื”ืฉื™ื ื•ื™, ื”ืขื‘ื•ื“ื” ืขื 50 ืืœืฃ ืคืจื™ื˜ื™ื ืื•ืžืจืช ืฉืžื”ื™ืจื•ืช ื”ืชื’ื•ื‘ื” ืฉืœ ื”ืงื•ืžืคื•ื ื ื˜ื” ืœื ืชื”ื™ื” ืžื–ื”ื™ืจื”, ืื‘ืœ ืขื ื›ืžื” ืืœืคื™ื ืื• ืืคื™ืœื• 20 ืืœืฃ ืคืจื™ื˜ื™ื ืฉื™ืžื•ืฉ ื‘ useDeferredValue ื›ืŸ ื™ื›ื•ืœ ืœืชืช ืฉื™ืคื•ืจ ืžื•ืจื’ืฉ ื‘ื–ืžื ื™ ื”ืชื’ื•ื‘ื”.

ToCode
1 419
ืžืืžืจ ืžืื•ื“ ืžืขื ื™ื™ืŸ ืขื ื ืชื•ื ื™ื ืจืœื•ื•ื ื˜ื™ื ืฉื‘ื“ื™ื•ืง ืžืชื—ื‘ืจ ืœืคื•ืกื˜ ืžื”ื‘ื•ืงืจ https://alexkrupp.typepad.com/sensemaking/2022/06/angular-without-ssr-is-faster-than-nextjs-with-ssr-i-have-the-data.html

ToCode
1 419
# ื”ืชืžื•ื ื” ื”ื’ื“ื•ืœื” ื‘ืจื•ืจ ืฉื™ื•ืชืจ ืงืœ ืœื“ื‘ืจ ืขืœ ื”ืคืจื˜ื™ื - ืœืื™ื–ื” coverage ืœื”ื’ื™ืข, ื›ืžื” ื–ืžืŸ ื”ื‘ื“ื™ืงื•ืช ืฆืจื™ื›ื•ืช ืœืจื•ืฅ, ืžื™ ืžืชื—ื–ืง ืืช ืฉืจืช ื” CI ืฉืžืจื™ืฅ ืื•ืชืŸ ืื• ื‘ืื™ื–ื” ื›ืœื™ ืฆืจื™ืš ืœื›ืชื•ื‘ ืืช ื”ื‘ื“ื™ืงื•ืช. ืื‘ืœ ื”ืขืจืš ื”ืืžื™ืชื™ ื”ื•ื ื‘ืชืžื•ื ื” ื”ื’ื“ื•ืœื” - ืœืžื” ื‘ื›ืœืœ ืื ื—ื ื• ื‘ื•ื“ืงื™ื? ืื™ื–ื” ืขืจืš ืžืงื‘ืœื™ื ืžื›ืœ ืกื•ื’ ื‘ื“ื™ืงื•ืช? ื›ืžื” ื–ื” ืขื•ืœื” ืœื ื•? ื–ื” ืœื ืขื•ื–ืจ ืœื ืกื•ืข ื‘ 100 ืงืž"ืฉ ื‘ื›ื™ื•ื•ืŸ ื”ืœื ื ื›ื•ืŸ. ื’ื ืื ืงืฉื” ื•ืืจื•ื›ื”, ื”ืฉื™ื—ื” ื”ื—ืฉื•ื‘ื” ื”ื™ื ืขืœ ื”ืชืžื•ื ื” ื”ื’ื“ื•ืœื”. ื›ืฉื–ื” ื™ื”ื™ื” ื‘ืจื•ืจ ื”ืฉืืจ ื™ื“ืื’ ืœืขืฆืžื•.

ToCode
1 419
# ื”ืžื—ื™ืจ ืฉืœ ื™ืฆื™ืจืชื™ื•ืช ื”ืฉืงืขื ื• ื›ื‘ืจ ื›ืœ ื›ืš ื”ืจื‘ื”... ื›ืœ ื”ืœืงื•ื—ื•ืช ืฉืœื ื• ืžื—ื›ื™ื ืœืคื™ืฆ'ืจ ื”ื–ื”... ื–ื” ืžืžืฉ ื›ืžืขื˜ ืขื•ื‘ื“... --- ืื ื”ืžืฉืคื˜ื™ื ื”ืืœื” ื ืฉืžืขื™ื ืœื›ื ืžื•ื›ืจื™ื ื–ื” ืœื ื‘ืžืงืจื”. ืจื•ื‘ ื”ืื ืฉื™ื, ื”ืฆื•ื•ืชื™ื ื•ื”ืืจื’ื•ื ื™ื ืœื ืื•ื”ื‘ื™ื ืœื”ื™ื›ืฉืœ, ื•ื›ืฉืžืฉื”ื• ืœื ื”ื•ืœืš ื‘ื›ื™ื•ื•ืŸ ื”ืจืฆื•ื™ ื”ื ื˜ื™ื” ื”ื˜ื‘ืขื™ืช ื”ื™ื ืœื”ืชืขืงืฉ ื•ืœื”ืžืฉื™ืš. ื•ื–ื” ื ื›ื•ืŸ ื‘ืžื™ื•ื—ื“ ื‘ืฆื“ ื”ื˜ื›ื ื™. ื”ืจื™ ืื•ืชื• ืคื™ืฆ'ืจ ืฉืื ื—ื ื• ืžื ืกื™ื ืœื‘ื ื•ืช ื›ื‘ืจ ืงื™ื™ื ืื™ืคืฉื”ื• ื‘ืื™ื–ื•ืฉื”ื™ ืžืขืจื›ืช ื‘ืขื•ืœื, ืื– ืžื” ืคืชืื•ื ืจืง ืื ื™ ืœื ืžืฆืœื™ื— ืœื‘ื ื•ืช ืื•ืชื•? ืžื” ืคืชืื•ื ืจืง ื”ืฆื•ื•ืช ืฉืœื™ ืœื ืžืฆืœื™ื— ืœื‘ื ื•ืช ืื•ืชื•? ื•ืžื” ื–ื” ืื•ืžืจ ืขืœื™ื ื•? ื•ื–ื• ืœื ืฉืืœื” ืฉืœ ืžื—ื™ืจื™ื. ื”ืžืฉืžืขื•ืช ืฉืœ ื›ื™ืฉืœื•ืŸ ื”ื™ื ืœื ืฉืื ื™ ืžืกืชื›ืœ ืขืœ ื”ืขืœื•ืช ื•ื‘ื•ื—ืจ ืœื ืœื”ืชืงื“ื ืขื ื”ืคื™ืฆ'ืจ. ื”ืžืฉืžืขื•ืช ืฉืœ ื›ื™ืฉืœื•ืŸ ื”ื™ื ืฉืื ื™ ืขื•ื‘ื“ ื•ืขื•ื‘ื“ ื•ืœื ืจื•ืื” ืชื•ืฆืื”. ื”ืžืฉืžืขื•ืช ื”ื™ื ื—ื•ืจ ืฉื—ื•ืจ ืฉืœ ื‘ืื’ื™ื, ื‘ื• ื›ืœ ืฆืขื“ ืงื“ื™ืžื” ืœื•ืงื— ืื•ืชื™ ืฉื ื™ ืฆืขื“ื™ื ืื—ื•ืจื”. ื›ื™ืฉืœื•ืŸ ื˜ื›ื ื™ ื–ื” ืœื”ื‘ื™ืŸ ืื—ืจื™ ื—ืฆื™ ืฉื ื” ืฉืœ ืขื‘ื•ื“ื” ืฉื‘ืขืฆื ืื™ืŸ ืœืš ืžื•ืฉื’ ืžื” ืืชื” ืขื•ืฉื”. ื–ื” ืœื”ื‘ื™ืŸ ืื—ืจื™ ื—ืฆื™ ืฉื ื” ืฉืœ ืขื‘ื•ื“ื” ืฉื‘ืขืฆื ืœืžืชื›ื ืชื™ื ืฉืœืš ืื™ืŸ ืžื•ืฉื’ ืžื” ื”ื ืขื•ืฉื™ื. ืฉื‘ืจื’ืข ื”ื–ื”, ื–ื” ืœื ืžืฉื ื” ืื ื ืงื‘ื•ืจ ืืช ื›ืœ ืžื” ืฉืขืฉื™ื ื• ื‘ื—ืฆื™ ืฉื ื” ื”ืื—ืจื•ื ื” ื•ื ืชื—ื™ืœ ืžื—ื“ืฉ ืื• ื ืžืฉื™ืš ืžืื™ืคื” ืฉืื ื—ื ื• ื ืžืฆืื™ื - ื›ืžื•ืช ื”ืขื‘ื•ื“ื” ืขื“ ืœืกื™ื•ื ืชื”ื™ื” ื–ื”ื”. ื‘ืชืคื™ืกืช ื”ืขื•ืœื ืฉืœ ืจื•ื‘ื ื• ื–ืืช ืžืกืงื ื” ื™ื•ืชืจ ืžื“ื™ ืงืฉื” ืœืขื™ื›ื•ืœ. --- ืœื‘ืขื™ื” ื”ื–ืืช ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ืจืง ืฉื ื™ ืคื™ืชืจื•ื ื•ืช: ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื”ื—ืœื™ื˜ ืฉืืฆืœื ื• ืœื ื™ื”ื™ื• ื›ื™ืฉืœื•ื ื•ืช ื˜ื›ื ื™ื™ื. ืฉื›ืฉืžืชื›ื ืชื™ื ืžืชื—ื™ืœื™ื ืœืขื‘ื•ื“ ืขืœ ืคื™ืฆ'ืจ ืžืกื•ื™ื ื”ื ื—ื™ื™ื‘ื™ื ืœื”ื’ื™ืข ืœืชื•ืฆืื” ืขื•ื‘ื“ืช; ืื• ืฉืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื”ื—ืœื™ื˜ ืœืืžืฅ ืืช ื”ื›ื™ืฉืœื•ื ื•ืช ื›ื—ืœืง ืžืชื”ืœื™ืš ื”ืคื™ืชื•ื—, ื•ืœื‘ื ื•ืช ืžื ื’ื ื•ื ื™ื ืฉื™ื–ื”ื• ืื•ืชื ื•ื™ื”ืคื›ื• ืื•ืชื ืœื ืกื‘ืœื™ื. ื‘ืคื™ืชืจื•ืŸ ื”ืจืืฉื•ืŸ, ื“ืจืš ื˜ื•ื‘ื” ืœื ืœื”ื™ื›ืฉืœ ื”ื™ื ืœืขื•ื“ื“ ืื ืฉื™ื ืœืขืฉื•ืช ืคื—ื•ืช: ืœื’ื™ื™ืก ืžืชื›ื ืชื™ื ืฉืžืขื“ื™ืคื™ื ืœืงื—ืช ืคื—ื•ืช ืกื™ื›ื•ื ื™ื, ืœืขื‘ื•ื“ ืจืง ืขืœ ืคื™ืฆ'ืจื™ื ืฉืืคืฉืจ ืœืกื™ื™ื ืžื”ืจ, ืœื™ืฆื•ืจ ืชื”ืœื™ืš ืคื™ืชื•ื— ืฉื‘ื• ื›ืœ ืคื™ืฆ'ืจ ืขื•ื‘ืจ 20 ืฉืœื‘ื™ื ืฉืœ ื‘ื™ืงื•ืจืช ื•ืื™ืคื™ื•ืŸ ืœืคื ื™ ืฉืžื’ื™ืข ืœืฆื•ื•ืช ื”ื˜ื›ื ื™, ื•ื›ื›ื” ื›ืฉื–ื” ื›ื‘ืจ ืžื’ื™ืข ื”ื›ืœ ืœืขื•ืก ื•ืžื•ื›ืŸ ืœืคื™ืชื•ื—. ืœื ื™ื›ื•ืœ ืœื”ื™ื›ืฉืœ. ืืจื’ื•ื ื™ื ืฉืจื•ืฆื™ื ืœืœื›ืช ื™ื•ืชืจ ืจื—ื•ืง ื‘ื“ืจืš ื”ื–ืืช ื™ื›ื•ืœื™ื ืœื™ื™ืฆืจ ืžื“ื“ื™ ืื™ื›ื•ืช ื›ืžื• "ื›ืžื” ื‘ืื’ื™ื ืชื™ืงื ืช ื”ื™ื•ื" ืื• "ื›ืžื” ืคื™ืฆ'ืจื™ื ืžื™ืžืฉืช ื”ืฉื‘ื•ืข" ื•ืืคื™ืœื• ืœื”ืขื ื™ืฉ ืขืœ ืชืงื•ืคื•ืช ืืจื•ื›ื•ืช ื‘ืœื™ ืคื™ืฆ'ืจื™ื. ื‘ืคื™ืชืจื•ืŸ ื”ืฉื ื™ , ื‘ืฉื‘ื™ืœ ืœื”ืชืžื•ื“ื“ ื˜ื•ื‘ ื™ื•ืชืจ ืขื ื›ืฉืœื•ื ื•ืช ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื”ืคื•ืš ืื•ืชื ืœืžืฉื”ื• ื™ื•ืชืจ ื™ื•ื ื™ื•ืžื™: ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื”ืฆื™ืข ืชืงืฉื•ืจืช ื˜ื•ื‘ื” ื™ื•ืชืจ ื‘ื™ืŸ ืฆื•ื•ืชื™ ื”ืคื™ืชื•ื— ืœืฆื•ื•ืช ื”ืคืจื•ื“ืืงื˜; ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื”ืฆืžื™ื“ ืœื›ืœ ืคื™ืฆ'ืจ, ื™ื—ื“ ืขื ื”ืื™ืคื™ื•ืŸ, ื’ื ืžื’ื‘ืœืช ื–ืžืŸ ืฉืื—ืจื™ื” ืœื ื ืžืฉื™ืš ืœืขื‘ื•ื“ ืขืœื™ื•; ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœืชืช ืœืžืชื›ื ืชื™ื ืœืขื‘ื•ื“ ืขืœ ื›ืžื” ืคื™ืฆ'ืจื™ื ื‘ืžืงื‘ื™ืœ ื•ืœืจืื•ืช ืื™ื–ื” ื›ื™ื•ื•ืŸ ืžื•ืฉืš ืื•ืชื ื™ื•ืชืจ ื•ืขืœ ืื™ื–ื” ืคื™ืฆ'ืจื™ื ืืฃ ืื—ื“ ืœื ืจื•ืฆื” ืœืขื‘ื•ื“, ื•ืื•ืœื™ ืื•ืชื ืœืงื‘ื•ืจ. ื‘ืงืฆืจื” ืœื™ืฆื•ืจ ืชืจื‘ื•ืช ื‘ื” ืžืชื›ื ืชื™ื ื™ืจื’ื™ืฉื• ื ื•ื— ืœื”ื’ื™ื“ "ื›ืจื’ืข ืื™ืŸ ืœื™ ืžื•ืฉื’ ืื™ืš ืœื”ืชืงื“ื ืขื ื”ืคื™ืฆ'ืจ ื”ื–ื”. ื‘ื•ืื• ื ืฉื™ื ืื•ืชื• ื‘ืฆื“ ื•ืื•ืœื™ ื‘ืขืชื™ื“ ื ื—ื–ื•ืจ ืืœื™ื•". ืชืจื‘ื•ืช ืืจื’ื•ื ื™ืช ื ื˜ื•ืœืช ื›ืฉืœื•ื ื•ืช ื ื•ืชื ืช ืœืžื ื”ืœื™ื ืฉืงื˜ ื ืคืฉื™. ืชืจื‘ื•ืช ืืจื’ื•ื ื™ืช ืฉืžื—ื‘ืงืช ื›ืฉืœื•ื ื•ืช ื ื•ืชื ืช ืœืžืชื›ื ืชื™ื ื—ื•ืคืฉ ื™ืฆื™ืจืชื™ ื•ืžืืคืฉืจืช ืคื™ืชื•ื— ืžืขืจื›ื•ืช ื˜ื•ื‘ื•ืช ื™ื•ืชืจ, ื‘ื’ืœืœ ืฉื™ื”ื™ื” ืœื ื• ื™ื•ืชืจ ืงืœ ืœืงื—ืช ืกื™ื›ื•ื ื™ื ืฉืžื™ื˜ื™ื‘ื™ื ืขื ื”ืžื•ืฆืจ. ื”ื™ื ื’ื ืžื•ืจื™ื“ื” ืœื—ืฅ ื•ืžืืคืฉืจืช ืœืžืชื›ื ืชื™ื ืœื”ืชืจื›ื– ื‘ืขื‘ื•ื“ื” ื•ืœื ืœื—ืคืฉ ืงื™ืฆื•ืจื™ ื“ืจืš ืจืง ื‘ืฉื‘ื™ืœ ืœืกืžืŸ "ื•ื™" ืขืœ ืขื•ื“ ืคื™ืฆ'ืจ. ื›ืžืชื›ื ืช, ื–ืืช ื”ืชืจื‘ื•ืช ื”ืืจื’ื•ื ื™ืช ืฉืื ื™ ืžืขื“ื™ืฃ ืœืขื‘ื•ื“ ื‘ื”.

ToCode
1 419
# ืจื™ืคืงื˜ื•ืจื™ื ื’ ื•ืชื›ื ื•ืช ืžื•ื ื—ื” ืขืฆืžื™ื (ืื•: ื”ืกื™ื‘ื” ืฉืชื›ื ื•ืช ืžื•ื ื—ื” ืขืฆืžื™ื ืœื ืขื•ื‘ื“) ื‘ื™ื•ื 7 ืฉืœ Advent Of Code ื”ืื—ืจื•ืŸ ืงื™ื‘ืœื• ืืช ืคื ื™ื ื• ื—ื‘ื•ืจื” ืฉืœ ืกืจื˜ื ื™ื ืฉื ื™ืกื• ืœื”ื’ืŸ ืขืœื™ื ื• ืžืœื•ื•ื™ืชืŸ ืชื•ืงืคื ื™. ื‘ืฉื‘ื™ืœ ืœืขืฉื•ืช ืืช ื–ื” ื”ื ื”ื™ื• ืฆืจื™ื›ื™ื ืœืžืฆื•ื ืžืงื•ื ื˜ื•ื‘ ืœืขืžื•ื“ ื‘ื•. ## ื—ืœืง ืจืืฉื•ืŸ ื”ืงืœื˜ ืฉืœ ื”ืชืจื’ื™ืœ ื”ื™ื” ืจืฉื™ืžืช ื”ืžื™ืงื•ืžื™ื ืฉืœ ื”ืกืจื˜ื ื™ื ืขืœ ืฆื™ืจ ืื•ืคืงื™ ื‘ืœื‘ื“, ืœืžืฉืœ:
16,1,2,0,4,2,7,1,2,14
ื•ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืžืฆื•ื ืœื”ื ืžืงื•ื ื˜ื•ื‘ ืœืขืžื•ื“ ื‘ื•. ื”ืžืงื•ื ื”ื›ื™ ื˜ื•ื‘ ื‘ืฉื‘ื™ืœื ื™ื”ื™ื” ื–ื” ืฉื”ื›ื™ ืงืœ ืœื›ื•ืœื ืœื”ื’ื™ืข ืืœื™ื•, ื›ืœื•ืžืจ ืฉืกื›ื•ื ื”ืฆืขื“ื™ื ืฉื›ืœ ื”ืกืจื˜ื ื™ื ืฆืจื™ื›ื™ื ืœืขืฉื•ืช ื›ื“ื™ ืœื”ื’ื™ืข ืœื™ืขื“ ื™ื”ื™ื” ื”ื›ื™ ืงื˜ืŸ. ืื™ื ื˜ื•ืื™ืฆื™ื” ืื—ืช ืœืคืชื•ืจ ืืช ื”ืชืจื’ื™ืœ ื”ื–ื” ืœืžื™ ืฉืจื•ืฆื” ืœืœื›ืช ื‘ื’ื™ืฉื” ืžื•ื ื—ื™ืช ืขืฆืžื™ื ื”ื™ื ืœื›ืชื•ื‘ ืžื—ืœืงื” ื‘ืฉื‘ื™ืœ ื›ืœ ื”ืกืจื˜ื ื™ื ื”ืืœื”. ื‘ืจื•ื‘ื™ ื›ืชื‘ืชื™ ืžืฉื”ื• ื›ื–ื”:
class CrabsSwarm
  def initialize(filename)
    @crabs = File.read(filename).split(',').map(&:to_i)
  end

  def fuel_needed_to_reach(target)
    @crabs.map {|e| (e - target).abs }.sum
  end

  def solve
    target = (@crabs.min..@crabs.max).min_by {|target| fuel_needed_to_reach(target) }
    fuel_needed_to_reach(target)
  end
end
ื™ืฉ ืื’ื‘ ืขื•ื“ ื”ืžื•ืŸ ื—ืœื•ืงื•ืช ืืคืฉืจื™ื•ืช ืœืžื—ืœืงื•ืช ื•ืื•ืœื™ ื‘ื›ืœืœ ืœื ื—ื™ื™ื‘ื™ื ืžื—ืœืงื•ืช. ื–ื” ืœื ื—ืฉื•ื‘ ื‘ืฉื‘ื™ืœ ื”ืกื™ืคื•ืจ ืฉืœื ื•. ืชืจืื• ืžื” ืงื•ืจื” ื‘ื—ืœืง ื”ืฉื ื™. ## ื—ืœืง ืฉื ื™ - ืžืฉื ื™ื ืืช ื”ื—ื™ืฉื•ื‘ ืœืžืจื•ืช ืฉืžืฆืืชื™ ืžืงื•ื ืžืžืฉ ื˜ื•ื‘ ื‘ืฉื‘ื™ืœ ื”ืกืจื˜ื ื™ื (ืขืœ ืงืœื˜ ื”ื“ื•ื’ืžื” ื–ื• ื”ื™ืชื” ืžืฉื‘ืฆืช 2), ื”ื ืœื ื”ืกื›ื™ืžื• ืœืœื›ืช ืœืฉื. ื”ื”ืกื‘ืจ ื‘ืชืจื’ื™ืœ ื”ื™ื” ืฉื”ืฆื•ืœืœืช ืฉืœ ื›ืœ ืกืจื˜ืŸ ืœื ืฆื•ืจื›ืช ื“ืœืง ื‘ืฆื•ืจื” ืœื™ื ืืจื™ืช ืืœื ื‘ืกื™ื“ืจื” ื—ืฉื‘ื•ื ื™ืช. ื›ืœื•ืžืจ ื‘ืฉื‘ื™ืœ ืœืขื‘ื•ืจ ืžืจื—ืง ืฉืœ 3 ื ืงื•ื“ื•ืช ื”ืกืจื˜ืŸ ืฆืจื™ืš ืœื”ืฉืชืžืฉ ื‘ 1+2+3 ื›ืœื•ืžืจ 6 ื™ื—ื™ื“ื•ืช ื“ืœืง. ืขื ื”ื ืชื•ื ื™ื ื”ื—ื“ืฉื™ื ื ืฉืœื—ื ื• ืœืžืฆื•ื ื ืงื•ื“ื” ื—ื“ืฉื” ืืœื™ื” ื™ื•ื›ืœื• ื”ืกืจื˜ื ื™ื ืœื”ืชืงื‘ืฅ. ื”ื‘ืขื™ื”, ืฉืœืžืจื•ืช ืฉื‘ื—ืœืง ื”ืจืืฉื•ืŸ ื—ืฉื‘ืชื™ ืฉื—ื™ืœืงืชื™ ื ื›ื•ืŸ ืืช ื”ืชืจื’ื™ืœ ืœืžื—ืœืงื” ื•ืคื•ื ืงืฆื™ื•ืช, ื›ืฉืื ื™ ืžื’ื™ืข ืœื”ืจื—ื™ื‘ ืืช ืื•ืชื” ืžื—ืœืงื” ื‘ื—ืœืง ื”ืฉื ื™ ืื ื™ ื ืืœืฅ ืœื›ืชื•ื‘:
class CrabsSwarmPart2 < CrabsSwarm
  def fuel_needed_to_reach(target)
    @crabs.map {|e| (0..(e - target).abs).sum }.sum
  end
end
ื‘ื•ื. ื” map ืžื”ื—ืœืง ื”ืจืืฉื•ืŸ ืžื•ืคื™ืข ืฉื•ื‘ ื’ื ื‘ื—ืœืง ื”ืฉื ื™. ื–ื” ืœื ื ืจืื” ื—ืฉื•ื‘ ื•ื‘ื’ืœืœ ื–ื” ื‘ื”ืจื‘ื” ืคืจื•ื™ืงื˜ื™ื ืขื•ืฆืจื™ื ื›ืืŸ. ืื‘ืœ ื‘ืขื•ืœื ื”ืืžื™ืชื™ ื–ืืช ื™ื›ื•ืœื” ืœื”ื™ื•ืช ื‘ืขื™ื”. ## ืžื” ืื ื™ ืœื•ืžื“ ืžื”ื“ืจื™ืฉื” ื”ื—ื“ืฉื” ื”ื‘ืขื™ื” ืคื” ื”ื™ื ืฉื‘ืžืงื•ื ืœื—ืคืฉ ืžื” ืื ื™ ืœื•ืžื“ ืžื”ื“ืจื™ืฉื” ื”ื—ื“ืฉื”, ืื ื™ ืžืžืฉื™ืš ืœื”ืชืขืงืฉ ืœื”ืชืื™ื ืืช ื”ื“ืจื™ืฉื” ื”ื—ื“ืฉื” ืœืกื›ื™ืžื” ืฉื›ื‘ืจ ื›ืชื‘ืชื™. ืœืื•ืจืš ื–ืžืŸ ื›ื›ืœ ืฉื™ื•ืชืจ ื“ืจื™ืฉื•ืช ื™ื•ืคื™ืขื• ื•ืœื ื™ืชืื™ืžื• ืœืกื›ื™ืžื” ืฉื—ืฉื‘ืชื™ ืขืœื™ื” ืžืจืืฉ, ืžื™ืžื•ืฉ ื›ืœ ื“ืจื™ืฉื” ื ื•ืกืคืช ื”ื•ืคืš ืœื™ื•ืชืจ ื•ื™ื•ืชืจ ืงืฉื”. ื”ืืœื˜ืจื ื˜ื™ื‘ื” ื”ื™ื ืœืฉืื•ืœ - ืžื” ืื ื™ ืœื•ืžื“ ืžื”ื“ืจื™ืฉื” ื”ื—ื“ืฉื”? ื‘ืžืงืจื” ืฉืœ ื”ืกืจื˜ื ื™ื ืื ื™ ืœื•ืžื“ ืฉื™ืฉ ืกื™ื›ื•ื™ ื˜ื•ื‘ ืฉื”ื ื™ืจืฆื• ืœื”ืžืฉื™ืš ืœื”ื—ืœื™ืฃ ื›ืœื™ ืชื—ื‘ื•ืจื” ื‘ืขืชื™ื“, ื•ืฉื›ืœื™ ืชื—ื‘ื•ืจื” ืกืจื˜ื ื™ื™ื ืฉื•ื ื™ื ื‘ื™ื ื™ื”ื ื‘ืฆืจื™ื›ืช ื”ื“ืœืง ืฉืœื”ื. ื–ืืช ื”ื ืงื•ื“ื” ืฉืฉื•ื•ื” ืœื™ ืœื”ืชืืžืฅ ื•ืœืฉื›ืชื‘ ื—ืœืง ืžื”ืงื•ื“ ื›ื“ื™ ืœืชืช ื™ื•ืชืจ ืžืฉืงืœ ืœื“ืจื™ืฉื” ื”ื—ื“ืฉื”. ื”ื ื” ื”ื ื™ืกื™ื•ืŸ ื”ืฉื ื™ ืฉืœื™:
class CrabsSwarm
  def initialize(filename)
    @crabs = File.read(filename).split(',').map(&:to_i)
  end

  def energy(from, to)
    (from - to).abs
  end

  def fuel_needed_to_reach(target)
    @crabs.map {|e| energy(e, target) }.sum
  end

  def solve
    target = (@crabs.min..@crabs.max).min_by {|target| fuel_needed_to_reach(target) }
    fuel_needed_to_reach(target)
  end
end
ื ื›ื•ืŸ, ืงื•ื“ ื™ื•ืชืจ ืืจื•ืš, ืื‘ืœ ื’ื ื™ื•ืชืจ ืงืœ ืœื”ืจื—ื‘ื” ื‘ื ืงื•ื“ื” ื”ื ื›ื•ื ื”. ืคื™ืชืจื•ืŸ ื”ื—ืœืง ื”ืฉื ื™ ื™ื”ื™ื” ื‘ืกืš ื”ื›ืœ ืฉื™ื ื•ื™ ืฉืœ ื”ืคื•ื ืงืฆื™ื” energy:
class CrabsSwarmPart2 < CrabsSwarm
  def energy(from, to)
    (0..(from - to).abs).sum
  end
end
ื•ื–ื” ื‘ื“ื™ื•ืง ืžื” ืฉื”ื—ืœืง ื”ืฉื ื™ ืžื“ื‘ืจ ืขืœื™ื•. ืœื™ื™ืฉื•ื ืื•ืชื• ืžื”ืœืš ื‘ืขื•ืœื ื”ืืžื™ืชื™ ื™ืฉ ื”ืฉืœื›ื•ืช: ื–ื” ืื•ืžืจ ืฉืื ื—ื ื• ืžื•ื›ื ื™ื ืœืขื“ื›ืŸ ื’ื ื“ื‘ืจื™ื ื‘ืกื™ืกื™ื™ื ื‘ืžืขืจื›ืช ื‘ืฉื‘ื™ืœ ืœืžืžืฉ ืคื™ืฆ'ืจื™ื ื—ื“ืฉื™ื, ื•ืฉืื™ืŸ ืงื•ื“ ื—ืฉื•ื‘ ืžื›ื“ื™ ืœืฉื ื•ืช ืื•ืชื•. ื’ื™ืฉื” ื›ื–ืืช ืžืฉืื™ืจื” ืืช ื›ืœ ืงื•ื“ ื”ืžืขืจื›ืช "ื—ื™" ื•ืขื•ื–ืจืช ืœื™ื™ืฆืจ ืžืขืจื›ื•ืช ืฉืžื•ืชืืžื•ืช ืœื“ืจื™ืฉื•ืช ื”ืืžื™ืชื™ื•ืช ื•ื”ืขื“ื›ื ื™ื•ืช ืฉืœ ื”ื—ื™ื™ื.

ToCode - Telegram kanali @tocodeil statistikasi va tahlili