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
-530 kunlar
Postlar arxiv
ToCode
1 419
ืงื•ืžืคื•ื ื ื˜ื•ืช ื•ื•ื‘ Web Components ืขื•ื‘ื“ื™ื ืžืžืฉ ื˜ื•ื‘ ื”ืจื‘ื” ื–ืžืŸ ืฉืžืจืชื™ ืžืจื—ืง ืž Web Components ื›ื™ ื”ื™ื” ืจื™ืืงื˜ ื• vue ื•ืœื ื‘ื˜ื•ื— ื›ืžื” ืชืžื™ื›ื” ื˜ื•ื‘ื” ื”ื™ืชื” ืœื”ื ื•ื”ื™ื• ืจื™ื‘ื™ื ื•ื›ืœ ืžื™ื ื™ ืฉื˜ื•ื™ื•ืช. ืื ื’ื ืืชื ืื™ื›ืฉื”ื• ืคืกืคืกืชื ืืช ืžื” ืฉืงืจื” ื‘ืจืฉืช ื‘ืฉื ื™ื ื”ืื—ืจื•ื ื•ืช ืชืฉืžื—ื• ืœืฉืžื•ืข ืฉื‘ืชื—ื•ื ืฉืœ Web Components ื›ืœ ื”ืกื™ืคื•ืจ ื ืคืชืจ ื•ื”ื™ื•ื ื”ื ืขื•ื‘ื“ื™ื ื“ื™ ื˜ื•ื‘. ื ื›ื•ืŸ ื”ื ืœื ื ื•ืชื ื™ื ืืช ื›ืœ ืžื” ืฉืจื™ืืงื˜ ื ื•ืชื ืช ื•ื”ื ื“ื•ืจืฉื™ื ื”ืจื‘ื” ืขื‘ื•ื“ื” ื™ื“ื ื™ืช ื‘ืขื™ืงืจ ื‘ื—ื™ื‘ื•ืจ ืงื•ื“ ืœื˜ื™ืคื•ืœ ื‘ืื™ืจื•ืขื™ื, ืื‘ืœ ืื™ืŸ ืœื™ ืกืคืง ืฉืื ื”ื ื”ื™ื• ืงื™ื™ืžื™ื ื‘ 2015 ืœื ื”ื™ื• ืœื ื• ืืช ื›ืœ ื” JavaScript Frameworks ืฉืื ื—ื ื• ืจื•ืื™ื ื”ื™ื•ื (ืื• ืžืฆื“ ืฉื ื™, ืื•ืœื™ ืจืง ื‘ื–ื›ื•ืช ืจื™ืืงื˜ ื•ื—ื‘ืจื™ื• ื›ื•ืชื‘ื™ ื”ืชืงื ื™ื ื”ืฆืœื™ื—ื• ืœื”ื’ื™ืข ืœื”ืกื›ืžื” ืขืœ Web Components). ื‘ื›ืœ ืžืงืจื” ื›ืชื‘ืชื™ ื“ื•ื’ืžื” ืงื˜ื ื” ืฉืœ ืžื•ื ื” ืœื—ื™ืฆื•ืช ื‘ Web Component ื‘ืฉื‘ื™ืœ ืœืฉื—ืง ืขื ื” API. ื” HTML ื”ื•ื:
<my-counter></my-counter>
<my-counter></my-counter>
<my-counter></my-counter>

<template id="counter">
  <p>I'm a counter. value = <span class="value">0</span>
    <button class="inc">+1</button>
    <button class="dec">-1</button>
  </p>
</template>
ื•ื”ื•ื ื›ื•ืœืœ ืืช ื”ื˜ืžืคืœื™ื™ื˜ ื•ื™ืฆื™ืจื” ืฉืœ ื”ืงื•ืžืคื•ื ื ื˜ื” 3 ืคืขืžื™ื, ื•ื” JavaScript ืฉื’ื•ืจื ืœื›ืœ ื”ืขืกืง ืœืขื‘ื•ื“ ื”ื•ื:
customElements.define(
  "my-counter",
  class extends HTMLElement {
    connectedCallback() {
      let template = document.getElementById("counter");
      let templateContent = template.content;
      const shadowRoot = this.attachShadow({ mode: "open" });
      
      shadowRoot.appendChild(templateContent.cloneNode(true));
      
      let value = 0;
      const valueSpan = shadowRoot.querySelector('.value')
      shadowRoot.querySelector('.inc').addEventListener('click', () => {
        value += 1;
        valueSpan.textContent = value;
      })
      
      shadowRoot.querySelector('.dec').addEventListener('click', () => {
        value -= 1;
        valueSpan.textContent = value;
      })
    }
  }
);
ื•ื›ืŸ ืฆืจื™ืš ื™ื“ื ื™ืช ืœืงื—ืช ืืช ื”ื˜ืžืคืœื™ื™ื˜, ืœืฉื›ืคืœ ืื•ืชื• ื•ืœื”ื•ืกื™ืฃ ืื•ืชื• ืœ DOM ื•ืื– ืœื”ื’ื“ื™ืจ ืืช ืงื•ื“ ื”ื˜ื™ืคื•ืœ ืœื›ืคืชื•ืจื™ื. ืื™ืŸ ืžื ื’ื ื•ืŸ ืžื•ื‘ื ื” ืฉืœ State ื• Props ื•ื›ืœ ื” Virtual DOM ืฉืื ืฉื™ื ืจื’ื™ืœื™ื ืœืจืื•ืช, ืื‘ืœ ื›ืŸ ื™ืฉ ืžื™ื“ื•ืœ ื•ื”ืคืจื“ื” ื‘ื™ืŸ ืงื•ื“ ื”ืงื•ืžืคื•ื ื ื˜ื” ืœืงื•ื“ ืฉืœ ืงื•ืžืคื•ื ื ื˜ื•ืช ืื—ืจื•ืช ื•ืืคืฉืจ ื’ื ืœื”ืคืจื™ื“ ืืช ื”ืขื™ืฆื•ื‘ ืžื”ืขื™ืฆื•ื‘ ื”ื›ืœืœื™ ืฉืœ ื”ืขืžื•ื“ ื•ืœื”ื“ื‘ื™ืง ืงื•ื‘ืฅ CSS ืกืคืฆื™ืคื™ ืœืงื•ืžืคื•ื ื ื˜ื”. ื’ื™ืจืกื” 19 ืฉืœ ืจื™ืืงื˜ ืฉืชื‘ื•ื ืขืœื™ื ื• ืœื˜ื•ื‘ื” ื‘ืื–ื•ืจ ื™ื•ื ื™ ืื• ื™ื•ืœื™ ื›ื•ืœืœืช ืœืคื™ ื”ืกื™ืคื•ืจื™ื ืชืžื™ื›ื” ืžืœืื” ื‘ Web Components ื›ืš ืฉื ื•ื›ืœ ืœืฉืœื‘ ืื•ืชื ื‘ื™ื™ืฉื•ื ืจื™ืืงื˜ ื‘ืœื™ ื‘ืขื™ื”. ื™ื”ื™ื” ืžืขื ื™ื™ืŸ. ื .ื‘. ื–ื” ื”ืœื™ื ืง ืœืงื•ื“ืคืŸ ืขื ื”ืงื•ืžืคื•ื ื ื˜ืช ื•ื•ื‘, ืชืจื’ื™ืฉื• ื—ื•ืคืฉื™ ืœืฉื—ืง ื•ืœืฉื‘ื•ืจ: https://codepen.io/ynonp/pen/qBGWQEw

ToCode
1 419
ืื ื™ ื›ื–ื” ืžืงืกื™ื ืคืฉื•ื˜ ืชื ื• ืœื™ ืืช ื”ืขื‘ื•ื“ื” ืœืžื” ืชื”ืœื™ื›ื™ ื’ื™ื•ืก ื‘ื”ื™ื™ื˜ืง ื›ืœ ื›ืš ืืจื•ื›ื™ื? ืœืžื” ื›ืœ ื›ืš ืงืฉื” ืœืžืฆื•ื ืขื‘ื•ื“ื”? ืœืžื” ืจืื™ื•ื ื•ืช ืขื‘ื•ื“ื” ื›ืœ ื›ืš ืžืชื™ืฉื™ื? ืœืžื” ืื ื™ ื ื‘ื—ืŸ ื‘ืฉืืœื•ืช "ืจืื™ื•ื ื•ืช ืขื‘ื•ื“ื”" ืฉืืฃ ืื—ื“ ื‘ื—ื‘ืจื” ืœื ื™ื•ื“ืข ืœืคืชื•ืจ? ืื ื™ ื”ืจื™ ื›ื–ื” ืžืงืกื™ื - ืœืžื” ืฉืœื ืชืชื ื• ืœื™ ืคืฉื•ื˜ ืืช ื”ืขื‘ื•ื“ื”? ื“ืจืŸ ืงื•ืค ื›ื•ืชื‘ ืื—ืจื™ ืฉื ื›ืฉืœ ื‘ืจืื™ื•ืŸ: > I understand the problems associated with hiring the wrong people as well, which may well be the actual reason we are rightfully stuck with such fearful/timid hiring practices. ื•ื‘ืžืงื•ื ืื—ืจ ื‘ืื•ืชื• ืคื•ืกื˜ ื”ื•ื ืžืกืคืจ ืขืœ ืื—ื“ ื”ืืชื’ืจื™ื ื‘ื’ื™ื•ืก ืœื ื ื›ื•ืŸ: > Iโ€™ve also spent hours fixing code that had issues directly stemming from not using the correct data structure/algorithm that I may not have had to if we had been better at screening the employees during the interview process. ืื ื™ ื—ื•ืฉื‘ ืฉื–ื” ื”ื—ืœืง ื”ื›ื™ ืงื˜ืŸ ื‘ืกื™ืคื•ืจ. ื›ืŸ ื’ื™ื•ืก ืื ืฉื™ื ืœื ื ื›ื•ื ื™ื ื™ื›ื•ืœ ืœื”ื‘ื™ื ืœืงื•ื“ ืœื ืื•ืคื˜ื™ืžืœื™ ื•ืœื—ื™ื™ื‘ ืกื‘ื‘ื™ื ืฉืœ Refactoring ืขืœ ื“ื‘ืจื™ื ืฉืื•ืœื™ ื”ื™ื” ืืคืฉืจ ืœืจืื•ืช ืงื•ื“ื. ืื‘ืœ ื‘ืกื•ืฃ ืจื™ืคืงื˜ื•ืจื™ื ื’ ืชืžื™ื“ ื™ืงืจื” ื•ืœืฉืคืจ ืชืžื™ื“ ืืคืฉืจ. ืชื”ืœื™ื›ื™ ืขื‘ื•ื“ื” ื˜ื•ื‘ื™ื ื™ื›ื•ืœื™ื ืœืขื–ื•ืจ ื•ื”ืจื‘ื” ืคืขืžื™ื ื›ืฉืื ื—ื ื• ืžื›ื ื™ืกื™ื ืžืชื›ื ืชื™ื ื‘ื™ื ื•ื ื™ื™ื ืœืžืงื•ืžื•ืช ืขื‘ื•ื“ื” ื˜ื•ื‘ื™ื ื”ื ืžืฉืชืคืจื™ื ื‘ื–ื›ื•ืช ืชื”ืœื™ื›ื™ ื”ืขื‘ื•ื“ื” ื‘ืื•ืชื ืžืงื•ืžื•ืช, ืชื”ืœื™ื›ื™ื ืฉื›ื•ืœืœื™ื ื”ื›ืฉืจื•ืช, Code Reviews ื•ื‘ืขืœื•ืช ืขืœ ืžื•ืฆืจ. ื”ืื ืฉื™ื ืฉืื ื—ื ื• ืจื•ืฆื™ื ืœืกื ืŸ ื”ื—ื•ืฆื” ื‘ืชื”ืœื™ืš ื”ื’ื™ื•ืก ื”ื ืœื ืืœื” ืฉื›ื•ืชื‘ื™ื ืงื•ื“ ื’ืจื•ืข ืžื—ื•ืกืจ ื™ื“ืข. ืืœื” ื›ืžื” ื‘ืขื™ื•ืช ืœื“ืขืชื™ ื™ื•ืชืจ ืžืฉืžืขื•ืชื™ื•ืช ื‘ื’ื™ื•ืก ื’ืจื•ืข- 1. ื’ื™ื•ืก ืื ืฉื™ื ืฉืคืฉื•ื˜ ืžื“ื‘ื™ืงื™ื ืงื•ื“ ืž Stack Overflow ืื• ืžื ื•ืขื™ AI ื‘ืœื™ ืœื”ื‘ื™ืŸ ืžื” ื”ื ื›ื•ืชื‘ื™ื ื•ื›ืชื•ืฆืื” ืžื›ืš ืžื™ื™ืฆืจื™ื ืขืจื™ืžื•ืช ื‘ื•ืฅ ืฉืื™ ืืคืฉืจ ืœื ืงื•ืช. 2. ื’ื™ื•ืก ืื ืฉื™ื ืฉื™ืชื•ื•ื›ื—ื• ืขืœ ื›ืœ ื“ื‘ืจ ื•ื™ืžืฆืื• ืขืฉืจื•ืช ืกื™ื‘ื•ืช ืœืžื” ืœื ืœืขืฉื•ืช, ื›ืฉืจืง ื”ื•ื•ื™ื›ื•ื— ืœื•ืงื— ื™ื•ืชืจ ื–ืžืŸ ืžืžื” ืฉื”ื™ื” ืฆืจื™ืš ื‘ืฉื‘ื™ืœ ืœืคืชื•ืจ ืืช ื”ื‘ืื’ ืื• ืœืชืช ืคื™ืชืจื•ืŸ ืžื”ื™ืจ ืœืœืงื•ื—. 3. ื’ื™ื•ืก ืื ืฉื™ื ืฉื™ื’ืจืžื• ืœื›ืœ ื”ืื—ืจื™ื ืœื”ืจื’ื™ืฉ ื˜ืคืฉื™ื, ืœื ื™ื”ื™ื• ืžื•ื›ื ื™ื ืœื”ืงืฉื™ื‘ ื•ืชืžื™ื“ ื™ืžืฆืื• ืžื™ืฉื”ื• ืื—ืจ ืœื”ืืฉื™ื. 4. ื’ื™ื•ืก ืื ืฉื™ื ืฉืžืชืขืงืฉื™ื ืขืœ ื˜ื›ื ื•ืœื•ื’ื™ื” ืกืคืฆื™ืคื™ืช ืื• ืฉื™ื˜ืช ืขื‘ื•ื“ื” ืกืคืฆื™ืคื™ืช ื•ืœื ื™ื›ื•ืœื™ื ืื• ืจื•ืฆื™ื ืœื ืกื•ืช ื’ื™ืฉื” ืื—ืจืช. 5. ื’ื™ื•ืก ืื ืฉื™ื ืฉื‘ื˜ื•ื—ื™ื ืฉืชื”ืœื™ื›ื™ ื”ืขื‘ื•ื“ื” ื”ืืจื’ื•ื ื™ื™ื ืจืง ืžืื˜ื™ื ืื•ืชื ื•ืœื›ืŸ ื™ืžืฆืื• ื“ืจื›ื™ื "ืœืงืฆืจ ืชื”ืœื™ื›ื™ื" ืขืœ ื—ืฉื‘ื•ืŸ ืื™ื›ื•ืช. ืงื™ืฆื•ืจ ืฉื ืฉืœื ืขืœื™ื• ืืช ื”ืžื—ื™ืจ ื‘ืขื•ื“ ื—ื•ื“ืฉื™ื ืื• ืฉื ื™ื. ืืคื™ืœื• ื’ื™ื•ืก ื’ืจื•ืข ืื—ื“ ื™ื›ื•ืœ ืœื”ืจื•ืก ืžื•ืฆืจ, ื•ื›ืžืขื˜ ืชืžื™ื“ ื›ืฉืื ื—ื ื• ืžื‘ื™ื ื™ื ืฉืขืฉื™ื ื• ื˜ืขื•ืช ื–ื” ื›ื‘ืจ ืžืื•ื—ืจ ืžื›ื“ื™ ืœืชืงืŸ. ื”ืœื•ื•ืื™ ืฉื”ื™ืชื” ื“ืจืš ืงืœื” ืœื—ื–ื•ืช ืืช ื”ืขืชื™ื“ ืื‘ืœ ื‘ื™ื ืชื™ื™ื ืจืื™ื•ื ื•ืช ืขื‘ื•ื“ื” ืžืชื™ืฉื™ื ื”ื ื”ืžื ื’ื ื•ืŸ ื”ื›ื™ ืคื—ื•ืช ืจืข ืฉืžืฆืื ื•.

ToCode
1 419
ื”ื™ื•ื ืœืžื“ืชื™: ืœืžื” ืœืฉื™ื ืžืจื›ืื•ืช ืžืกื‘ื™ื‘ ืœืคื•ืจื˜ื™ื ื‘ docker-compose ื‘ื•ืื• ื ืฉื—ืง ืขื ืจื•ื‘ื™, ื›ื™ ื”ื™ื ืงืœื” ื•ื™ืฉ ืชืžื™ื›ื” ืžื•ื‘ื ื™ืช ื‘ YAML. ื–ืืช ื”ืชื•ื›ื ื™ืช:
require 'yaml'
require 'pp'

data = YAML.safe_load(<<-END
  apache:
  image: httpd:latest
  container_name: my-apache-app
  ports:
    - 80:80
    - 24:42
  volumes:
    - ./website:/usr/local/apache2/htdocs
END
)

pp data
ืืคืฉืจ ืœืจืื•ืช ืื•ืชื• ืœื™ื™ื‘ ื‘ URL ื”ื–ื”: https://tinyurl.com/mwk97ybd ืขื›ืฉื™ื• ื”ืชื•ื›ื ื™ืช ื‘ืกืš ื”ื›ืœ ืœื•ืงื—ืช YAML, ืงื•ืจืืช ืื•ืชื• ื•ืžื“ืคื™ืกื” ืื•ืชื• ื›ืžื™ืœื•ืŸ. ื™ื›ื•ืœื™ื ืœื ื—ืฉ ืžื” ื™ื”ื™ื” ื‘ืžืคืชื— ports ืฉืœ ื”ืžื™ืœื•ืŸ? ืจืžื–: ืœื ืžื” ืฉืืชื ื—ื•ืฉื‘ื™ื. ื–ื” ื ืจืื” ื›ื›ื”:
"ports"=>["80:80", 88920],
ืื ื™ ืžื‘ื™ืŸ ืžืื™ืคื” ื”ื’ื™ืข ื” 80:80, ืื‘ืœ ืžื” ื”ืกื™ืคื•ืจ ืขื ื” 88920? ืžื” ืงืจื” ืœ 24:42? ื ื• ื”ืชืฉื•ื‘ื” ื‘ื›ื•ืชืจืช ื”ืคื•ืกื˜. ื›ืฉืงื•ืจืื™ื YAML ืฉื™ืฉ ื‘ื• ืฉื ื™ ืžืกืคืจื™ื ื ืงื•ื“ื•ืชื™ื™ื ื•ืื– ืขื•ื“ ืฉื ื™ ืžืกืคืจื™ื ื”ืžืคืขื ื— ื—ื•ืฉื‘ ืฉื–ื” ืชื™ืื•ืจ ื–ืžืŸ (ืฉืขื•ืช ื•ื“ืงื•ืช). ืื– ื”ื•ื ืžื›ืคื™ืœ ืืช 24 ื‘ 60 ื•ืžื•ืกื™ืฃ 42 ื•ื›ืš ืžืงื‘ืœ 1482, ื•ืื– ื”ื•ืคืš ืืช ื–ื” ืœืฉื ื™ื•ืช ื•ืžืงื‘ืœ 88920 ืฉื–ื” ื”ืžืกืคืจ ืฉืื ื—ื ื• ืจื•ืื™ื ื›ืืŸ. ืžื” ืขื•ืฉื™ื? ื ื–ื›ืจื™ื ืฉ YAML ื”ื•ื ืฉื“ื” ืžื•ืงืฉื™ื ืื—ื“ ื’ื“ื•ืœ ื•ืชืžื™ื“ ื›ื•ืชื‘ื™ื ืžื—ืจื•ื–ื•ืช ื‘ืชื•ืš ืžืจื›ืื•ืช.

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

ToCode
1 419
ืžื” ืฆืจื™ืš ืœืขืฉื•ืช ื‘ืฉื‘ื™ืœ ืœื”ื•ืกื™ืฃ ืงื•ืžืคื•ื ื ื˜ื” ืœืขืžื•ื“? ื˜ื™ื™ืง ื ื•ืกืฃ ืขืœ ื”ื”ืชืœื‘ื˜ื•ืช ืžืืชืžื•ืœ. ื‘ื•ืื• ื ื—ืฉื•ื‘ ืขืœ ื–ื” ืžื”ื–ื•ื•ื™ืช ืฉืœ ืงื•ืžืคื•ื ื ื˜ื•ืช ื•ื”ื•ืกืคืช ืงื•ืžืคื•ื ื ื˜ื•ืช ืœืขืžื•ื“. ื ื ื™ื— ืฉื™ืฉ ืœื™ ืงื•ืžืคื•ื ื ื˜ื” ืฉืœ ืงืจื•ืกืœืช ืชืžื•ื ื•ืช ื•ื™ืฉ ืœื™ ื ืชื™ื‘ ืขืœ ื”ืฉืจืช ืฉืžื—ื–ื™ืจ ืืช ื”ืชืžื•ื ื•ืช ืฉืฆืจื™ืš ืœื”ืฆื™ื’ ื‘ืงืจื•ืกืœื” (ื ื“ืžื™ื™ืŸ ืคืจืกื•ืžืช ืœ-5 ืžื•ืฆืจื™ื ื”ื›ื™ ื˜ื•ื‘ื™ื ื‘ืืชืจ). ื•ืขื›ืฉื™ื• ื ืฉืืœ - ืžื” ืฆืจื™ืš ืœืขืฉื•ืช ื‘ืฉื‘ื™ืœ ืœื”ื•ืกื™ืฃ ืงื•ืžืคื•ื ื ื˜ืช ืงืจื•ืกืœื” ื›ื–ืืช ืœืขืžื•ื“? ื’ื™ืฉื” ืื—ืช ืžืชืจื›ื–ืช ื‘ืงื•ืžืคื•ื ื ื˜ื” ื•ืื•ืžืจืช ืฉื”ืงื•ืžืคื•ื ื ื˜ื” ืขืฆืžื” ืื—ืจืื™ืช ืœืžืฉื•ืš ืืช ืจืฉื™ืžืช ื”ืชืžื•ื ื•ืช ื•ืื– ืืคืฉืจ ืœื”ื•ืกื™ืฃ ืื•ืชื” ืœื›ืœ ื“ืฃ. ื”ืงื•ื“ ื™ื”ื™ื” ืžืฉื”ื• ื›ื–ื”:
export function TopProducts() {
    const {data} = useSWR('/top-products');
    // render the list
    return <>...</>
}
ื’ื™ืฉื” ืฉื ื™ื™ื” ืžืชืจื›ื–ืช ื‘ื“ืฃ ื•ืื•ืžืจืช ืฉื›ืœ ื“ืฃ ืื—ืจืื™ ืœืžืฉื•ืš ืืช ื”ืžื™ื“ืข ืฉื™ื•ืฆื’ ื‘ื›ืœ ื”ืงื•ืžืคื•ื ื ื˜ื•ืช ื‘ืขืžื•ื“. ื‘ืžืฆื‘ ื›ื–ื” ื”ืงื•ืžืคื•ื ื ื˜ื” ืชื”ื™ื”:
export function TopProducts() {
    const topProducts = useSelector(state => state.topProducts);
    // render the list
    return <>...</>;
}
ื›ืฉืื ื—ื ื• ืžืชืจื›ื–ื™ื ื‘ืงื•ืžืคื•ื ื ื˜ื” ืงืœ ืœื›ืœ ืžืคืชื— ืœื”ื•ืกื™ืฃ ืงื•ืžืคื•ื ื ื˜ืช ืคืจืกื•ืžืช ื›ื–ืืช ืœื›ืœ ื“ืฃ ื‘ืืชืจ ื•ื›ืฉืžื•ื—ืงื™ื ืืช ื›ืœ ื”ืงืจื•ืกืœื•ืช ืžื“ืฃ ืื•ื˜ื•ืžื˜ื™ืช ื”ื“ืฃ ืžืคืกื™ืง ืœืžืฉื•ืš ืืช ื”ืจืฉื™ืžื” ืžื”ืฉืจืช. ืื‘ืœ ื‘ืœื™ ื˜ื™ืคื•ืœ ืžื™ื•ื—ื“ ื”ืžื ื’ื ื•ืŸ ื”ื–ื” ื™ื‘ื™ื ืœืืคืงื˜ ืžืคืœ ืžื™ื ื‘ืžืฉื™ื›ืช ื”ืžื™ื“ืข, ื›ืฉืจืง ื›ืฉืงื•ืžืคื•ื ื ื˜ืช ื”ืงืจื•ืกืœื” ืžืชืจื ื“ืจืช ืžืชื—ื™ืœื™ื ืœืžืฉื•ืš ืืช ื”ืžื™ื“ืข ืฉื”ื™ื ืฆืจื™ื›ื” (ื•ื›ืš ื’ื ืœื’ื‘ื™ ื›ืœ ื”ืงื•ืžืคื•ื ื ื˜ื•ืช ื”ืื—ืจื•ืช ืฉืฆืจื™ื›ื•ืช ืžื™ื“ืข ืžื”ืฉืจืช), ืžื” ืฉืคื•ื’ืข ื‘ื‘ื™ืฆื•ืขื™ื. ื›ืฉืื ื—ื ื• ืžืชืจื›ื–ื™ื ื‘ื›ืœ ื“ืฃ ื•ืžื•ืฉื›ื™ื ืืช ื›ืœ ื”ืžื™ื“ืข ืฉื”ื“ืฃ ืฆืจื™ืš ื‘ื›ื ื™ืกื” ืืœื™ื• ืงืœ ืžืื•ื“ ืœืžืงื‘ืœ ื‘ืงืฉื•ืช ื•ื›ืš ืœืžืฉื•ืš ืืช ื›ืœ ื”ืžื™ื“ืข ืฉื›ืœ ื”ืงื•ืžืคื•ื ื ื˜ื•ืช ืฆืจื™ื›ื•ืช ื‘ืžื›ื” ืื—ืช, ืื‘ืœ ื”ื•ืกืคื” ืฉืœ ืงื•ืžืคื•ื ื ื˜ื” ื“ื•ืจืฉืช ืฉื™ื ื•ื™ ืฉืœ ื”ืžื™ื“ืข ื”ื’ืœื•ื‘ืืœื™ ื•ืžืฉื™ื›ื” ืฉืœ ื™ื•ืชืจ ืžื™ื“ืข. ืฉื™ืคื•ืจ ื‘ื™ืฆื•ืขื™ื ืขืœ ื—ืฉื‘ื•ืŸ ื—ื•ื•ื™ืช ืคื™ืชื•ื—. ื•ื–ื” ื”ื˜ืจื™ื™ื“ ืื•ืฃ ืฉื‘ืจื™ืืงื˜ ืœื ืžืฆืœื™ื—ื™ื ืœืฆืืช ืžืžื ื•, ื”ืžืขื’ืœ ืฉื›ื•ืœื ืžื ืกื™ื ืœืจื‘ืข. ืื– ืœืจืžื™ืงืก ื™ืฉ ืžื ื’ื ื•ืŸ ืฉืื•ื˜ื•ืžื˜ื™ืช ืื•ืกืฃ ืืช ื›ืœ ืžืฉื™ื›ื•ืช ื”ืžื™ื“ืข (ื” loaders) ืžื›ืœ ื”ื™ืœื“ื™ื ื›ื“ื™ ืœื ืกื•ืช ืœืžืงื‘ืœ ืื•ืชื, ื• React Server Components ื• next ืžื ืกื™ื ืœื‘ื˜ืœ ืœื’ืžืจื™ ืืช ืงืจื™ืื•ืช ื” API ื‘ืขืœื™ื™ื” ื›ื™ ื”ื›ืœ ื™ืชืจื ื“ืจ ืขืœ ื”ืฉืจืช, ืื‘ืœ ื–ื” ื‘ืกืš ื”ื›ืœ ืœื”ื–ื™ื– ืืช ื”ื‘ืขื™ื” ืžืฆื“ ืœืฆื“. ื‘ืกื•ืฃ ื™ืฉ ืœื ื• ื‘ืขื™ื” ืžื”ื•ืชื™ืช ื‘ืžื•ื“ืœ ื• Trade Off ืืžื™ืชื™ ืฉืฆืจื™ืš ืœื”ื—ืœื™ื˜ ืœื’ื‘ื™ื•: ื—ื•ื•ื™ืช ืคื™ืชื•ื— ืื• ื‘ื™ืฆื•ืขื™ื.

ToCode
1 419
ืขื›ืฉื™ื• ื‘ื—ื–ืจื” ืœื”ืชืœื‘ื˜ื•ืช ืฉืœื ื• - ื”ืื ืœื ื”ืœ ืืช ื”ืžื™ื“ืข ืฉื ืฉืžืจ ื‘ืฆื“ ืœืงื•ื— ื‘ืฆื•ืจื” ืžื•ื‘ืœืขืช ื‘ืชื•ืš ื” Hooks ืื• ื‘ืคืจื™ื™ืžื•ื•ืจืง ืœื ื™ื”ื•ืœ ืกื˜ื™ื™ื˜ ืฆื“ ืœืงื•ื— ืžืกื•ื“ืจ? ื›ืžื• ืชืžื™ื“ ื‘ืฉืืœื•ืช ื”ืืœื” ืื™ืŸ ืชืฉื•ื‘ื” ื—ื“ ืžืฉืžืขื™ืช. ื”ื ื˜ื™ื™ื” ืฉืœื™ ื”ื™ื ืœื‘ื—ื•ืจ ื‘ืคืจื™ื™ืžื•ื•ืจืง ืฆื“ ืœืงื•ื— ื›ื“ื™ ืœืงื‘ืœ ืฉืœื™ื˜ื” ื˜ื•ื‘ื” ื™ื•ืชืจ ื‘ืชื–ืžื•ื ื™ื. ื‘ื“ื•ื’ืžื” ืฉืœ ืื™ืจื•ืขื™ Server Sent Events ืงืœ ืœื“ืžื™ื™ืŸ ืฉืื ื™ ืืจืฆื” ืœื”ืžืฉื™ืš ืœื”ืงืฉื™ื‘ ืœืื™ืจื•ืขื™ื ื’ื ื‘ืœื™ ืงื•ืžืคื•ื ื ื˜ื” ืขืœ ื”ืžืกืš. ืœืžืฉืœ ืื ืงื•ืžืคื•ื ื ื˜ื” ืžืฆื™ื’ื” ืจืฉื™ืžืช ืขื“ื›ื•ื ื™ื ื•ืžืฉืชืžืฉ ืขื•ื‘ืจ ืœืžืกืš ืื—ืจ, ืื– ื›ืฉืื ื™ ื—ื•ื–ืจ ืœืžืกืš ืจืฉื™ืžืช ื”ืขื“ื›ื•ื ื™ื ืื ื™ ืืจืื” ืฉื ืืช ื”ืขื“ื›ื•ื ื™ื ืฉื ืฉืœื—ื• ื’ื ื‘ื–ืžืŸ ืฉื”ื™ื™ืชื™ ื‘ืžืกืš ื”ืื—ืจ. ื™ื—ื“ ืขื ื–ืืช ืื™ืŸ ืกืคืง ืฉื‘ืžืงืจื™ื ืคืฉื•ื˜ื™ื ื” Hook ื‘ืžื™ื•ื—ื“ ื›ื–ื” ืฉืคืฉื•ื˜ ืžื“ื‘ื™ืงื™ื ืžื”ืื™ื ื˜ืจื ื˜ ื—ื•ืกืš ื›ืชื™ื‘ืช ืงื•ื“ ื•ื™ื›ื•ืœ ืœืงืฆืจ ื–ืžื ื™ ืคื™ืชื•ื—. ืžื” ื“ืขืชื›ื? ืื™ื–ื” ื’ื™ืฉื” ืขื‘ื“ื” ืœื›ื ื˜ื•ื‘ ื™ื•ืชืจ?

ToCode
1 419
ื•ืžื” ืื ืฉืชื™ ืงื•ืžืคื•ื ื ื˜ื•ืช ืžืงืฉื™ื‘ื•ืช ืœืื•ืชื• SSE ? ื›ืฉื”ื™ื™ืชื™ ืฆืจื™ืš ืœื›ืชื•ื‘ ืงื•ืžืคื•ื ื ื˜ืช ืจื™ืืงื˜ ืฉืžืงืฉื™ื‘ื” ืœ Server Sent Events ื•ืžืขื“ื›ื ืช ืืช ื”ืชืฆื•ื’ื” ืœืคื™ ื”ืื™ืจื•ืข ืฉืžื’ื™ืข ื”ืื™ื ื˜ื•ืื™ืฆื™ื” ื”ืจืืฉื•ื ื” ืฉืœื™ ื”ื™ืชื” ืœื”ื•ืกื™ืฃ ืืคืงื˜:
useEffect(() => {
  const evtSource = new EventSource("/notifications");
  const handler = (e: MessageEvent) => {
    setPosts(p => [...p, JSON.parse(e.data)]);
  };
  evtSource.addEventListener('message', handler);

  return () => {
    evtSource.close();
  }
}, []);
ื•ืื– ื”ืขื•ืœื ื”ื’ื™ืข ื•ื”ื™ื” ืฆืจื™ืš ืœืขื“ื›ืŸ ืงื•ืžืคื•ื ื ื˜ื” ื ื•ืกืคืช ื›ืฉืจืฉื™ืžืช ื”ืคื•ืกื˜ื™ื ืžืชืขื“ื›ื ืช. ืขื›ืฉื™ื• ืžื” ืขื•ืฉื™ื? ื”ืชืฉื•ื‘ื” ื›ืฉืฆืจื™ืš ืœืฉืชืฃ ืžื™ื“ืข ื‘ื™ืŸ ืงื•ืžืคื•ื ื ื˜ื•ืช ื”ื™ื ืชืžื™ื“ ื–ื”ื” - ืฉื•ืžืจื™ื ืืช ื”ืžื™ื“ืข ื‘ืžืงื•ื ืžืจื›ื–ื™ ื‘ืจืžืช ื”ืืคืœื™ืงืฆื™ื” (ืžื” ืฉื ืงืจื Store) ื•ื›ืœ ืงื•ืžืคื•ื ื ื˜ื” ืœื•ืงื—ืช ืžืฉื ืืช ื”ืžื™ื“ืข. ื“ืจืš ืื—ืช ืœื‘ื ื•ืช State ื’ืœื•ื‘ืืœื™ ืœืืคืœื™ืงืฆื™ื” ื”ื™ื ืœืฉืœื‘ ืคืจื™ื™ืžื•ื•ืจืง ื›ืžื• ืจื™ื“ืืงืก (ืื• Jotai ืื• preact-signals ืื• zustand ืื• ืืคื™ืœื• ืžื•ื‘ืืงืก). ืคืจื™ื™ืžื•ื•ืจืง ืœื ื™ื”ื•ืœ ืกื˜ื™ื™ื˜ ืžื›ืจื™ื— ืื•ืชื™ ืœื›ืชื•ื‘ ืืช ื”ืงื•ื“ ืฉืžืชื—ื‘ืจ ืœ SSE Endpoint ื•ืœื”ื—ืœื™ื˜ ืื™ืคื” ื™ื™ืฉืžืจ ื”ืžื™ื“ืข ื•ืžืชื™ ืžืคืกื™ืงื™ื ืœื”ืงืฉื™ื‘ ืœืื™ืจื•ืขื™ื. ื“ืจืš ืฉื ื™ื™ื” ืœื‘ื ื•ืช State ื’ืœื•ื‘ืืœื™ ื”ื™ื ืœืฉื™ื ืืช ื”ืžื™ื“ืข ื‘ Context ื•ืœืžืฉื•ืš ืื•ืชื• ื“ืจืš Hook. ื”ืจื‘ื” ืคืขืžื™ื ื ืจืื” ืืช ื”ืคื™ืชืจื•ืŸ ื”ื–ื” ื‘ Hooks ืžื•ื›ื ื™ื, ืœืžืฉืœ use-event-source. ืื ื™ ืžื“ื‘ื™ืง ื›ืืŸ ืืช ื”ืงื•ื“ ืฉืœื• ื›ื™ ื–ื” ืžืขื ื™ื™ืŸ:
import { createContext, useContext, useEffect, useState } from "react";

export interface EventSourceOptions {
 init?: EventSourceInit;
 event?: string;
}

export type EventSourceMap = Map<
 string,
 { count: number; source: EventSource }
>;

const context = createContext<EventSourceMap>(
 new Map<string, { count: number; source: EventSource }>(),
);

export const EventSourceProvider = context.Provider;

/**
 * Subscribe to an event source and return the latest event.
 * @param url The URL of the event source to connect to
 * @param options The options to pass to the EventSource constructor
 * @returns The last event received from the server
 */
export function useEventSource(
 url: string | URL,
 { event = "message", init }: EventSourceOptions = {},
) {
 let map = useContext(context);
 let [data, setData] = useState<string | null>(null);

 useEffect(() => {
  let key = [url.toString(), init?.withCredentials].join("::");

  let value = map.get(key) ?? {
   count: 0,
   source: new EventSource(url, init),
  };

  ++value.count;

  map.set(key, value);

  value.source.addEventListener(event, handler);

  // rest data if dependencies change
  setData(null);

  function handler(event: MessageEvent) {
   setData(event.data || "UNKNOWN_EVENT_DATA");
  }

  return () => {
   value.source.removeEventListener(event, handler);
   --value.count;
   if (value.count <= 0) {
    value.source.close();
    map.delete(key);
   }
  };
 }, [url, event, init, map]);

 return data;
}
ื” Hook ื™ื•ืฆืจ ืžืคื” ื’ืœื•ื‘ืืœื™ืช ืฉืœ Event Listeners ืฉืžืงืฉื™ื‘ื™ื ืœืื™ืจื•ืขื™ื ืœืคื™ ื” URL. ื›ืœ ืคืขื ืฉืงื•ืžืคื•ื ื ื˜ื” ืฆืจื™ื›ื” ืœื”ืชื—ื‘ืจ ืœ SSE Endpoint ื”ื ืชื™ื‘ ืžืฆื˜ืจืฃ ืœืžืคื” ื•ืื ื”ื•ื ื›ื‘ืจ ืงื™ื™ื ืฉื ืื– ืขืจืš ื” count ืขื•ืœื” ื‘-1. ื›ืฉืืฃ ืงื•ืžืคื•ื ื ื˜ื” ืœื ืžืงืฉื™ื‘ื” ืœืื™ืจื•ืขื™ื ื” SSE ื ืกื’ืจ ื•ื ืžื—ืง ืžื”ืžืคื”. ื”ืฉื™ืžื•ืฉ ื‘ Hook ื ืจืื” ื›ืš (ืžืชื•ืš ื”ื“ื•ื’ืžื” ืฉืœื”ื ื‘ Readme):
// app/components/counter.ts
import { useEventSource } from "remix-utils/sse/react";

function Counter() {
 // Here \/sse/time\ is the resource route returning an eventStream response
 let time = useEventSource("/sse/time", { event: "time" });

 if (!time) return null;

 return (
  <time dateTime={time}>
   {new Date(time).toLocaleTimeString("en", {
    minute: "2-digit",
    second: "2-digit",
    hour: "2-digit",
   })}
  </time>
 );
}

ToCode
1 419
ืขื‘ื•ื“ื” ืขื ืžื™ื“ืข ื‘ื™ื ืืจื™ ื‘ JavaScript ืžืขืจื›ื™ื ื‘ื™ื ืืจื™ื™ื ืžื–ืžืŸ ื ื›ื ืกื• ืœืฉืคืช JavaScript ื•ื™ื›ื•ืœื™ื ืœืขื–ื•ืจ ืœื ื• ื‘ืคื™ืชื•ื— ืงื•ื“ ืฆื“ ืฉืจืช ื•ื’ื ืฆื“ ืœืงื•ื—. ืืœื” ื”ืขืงืจื•ื ื•ืช ื”ืžืจื›ื–ื™ื™ื ืฉืฆืจื™ืš ืœื”ื›ื™ืจ ื‘ืขื‘ื•ื“ื” ืื™ืชื. ืžืขืจื›ื™ื ื‘ JavaScript ื”ืชืงืŸ ืฉืœ JavaScript ืžื’ื“ื™ืจ ืฉื ื™ ืžื‘ื ื™ื ืฉื—ืฉื•ื‘ ืœื”ื›ื™ืจ. ื”ืจืืฉื•ืŸ ื”ื•ื Buffer ืฉื–ื” ืื•ืกืฃ ืฉืœ ื‘ื™ื˜ื™ื ื‘ื–ื™ื›ืจื•ืŸ, ื•ื”ืฉื ื™ ื”ื•ื Typed Array, ืฉื–ื” ืžืžืฉืง ืฉืขื•ื˜ืฃ ืืช ื” Buffer ื•ืžืืคืฉืจ ืœื ื• ืœื’ืฉืช ืœื‘ื™ื˜ื™ื ื›ืฉืื ื—ื ื• ืžืชื™ื—ืกื™ื ืืœื™ื”ื ื‘ืชื•ืจ ืžืกืคืจื™ื. ื—ื•ืฆืฅ ื™ืฉ ืจืง ืื—ื“ ืื‘ืœ Typed Arrays ื™ืฉ ื”ืจื‘ื” ืœืคื™ ืกื•ื’ื™ ื”ืžื™ื“ืข ืฉื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ืฉืžื•ืจื™ื ื‘ื—ื•ืฆืฅ: ื”ืจื‘ื” ืžืžืฉืงื™ื ืฉืœ Deno ื• Node ื™ื—ื–ื™ืจื• ืœื›ื Buffer ื•ืืชื ืชืฆื˜ืจื›ื• ืœื‘ื ื•ืช ืžืขืจืš ืฉืœ ื‘ืชื™ื ืกื‘ื™ื‘ื• ื›ื“ื™ ืœื’ืฉืช ืืœื™ื•. ืืคืฉืจ ื’ื ืœื™ืฆื•ืจ Buffer ื‘ืฆื•ืจื” ื™ื“ื ื™ืช ื›ื“ื™ ืœืจืื•ืช ืื™ืš ื”ืžืขืจื›ื™ื ื”ืฉื•ื ื™ื ื ื™ื’ืฉื™ื ืœืื•ืชื• ืžื™ื“ืข. ื‘ื•ืื• ื ื ืกื” ืืช ื–ื”, ืืคืฉืจ ื‘ื—ืœื•ืŸ Console ืฉืœ ื“ืคื“ืคืŸ ืื• ื‘ REPL ืฉืœ ื“ื™ื ื•:
> const buffer = new ArrayBuffer(16);
> buffer.byteLength
16

// create arrays around the buffer
> const a = new Uint8Array(buffer)

// or around just part of the buffer
> const b = new Uint8Array(buffer, 0, 4)
> const c = new Uint16Array(buffer)
> const d = new Float32Array(buffer)

// look at the sizes
a.length === 16
b.length === 4
c.length === 8
d.length === 4
ืขื›ืฉื™ื• ื™ืฉ ืœื™ 4 ืžืขืจื›ื™ื ืฉืžืกืชื›ืœื™ื ืขืœ ืื•ืชื• ืžื™ื“ืข ืื‘ืœ ื‘ืฆื•ืจื•ืช ืฉื•ื ื•ืช. ืื ืื ื™ ืžืฉื ื” ืืช ื”ืžื™ื“ืข ืžืžืขืจืš ืื—ื“ ื›ืœ ื”-4 ื™ืจืื• ืืช ื”ืฉื™ื ื•ื™, ืื‘ืœ ื‘ื“ืจืš ืื—ืจืช:
d[0] = 2.5

// a is:
0, 0, 32, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

// b is:
0, 0, 32, 64

// c is:
0, 16416, 0, 0, 0, 0, 0, 0

// d is:
2.5, 0, 0, 0
ื”ืกื™ื‘ื” ื”ื™ื ืฉืื•ืชื ื”ื‘ื™ื˜ื™ื ืฉืžื™ื™ืฆื’ื™ื ืืช ื”ืžืกืคืจ 2.5 ื‘ืžืขืจืš ืฉืœ Float ืžื™ื™ืฆื’ื™ื ืžืกืคืจื™ื ืื—ืจื™ื ื‘ืžืขืจืš ืฉืœ Int-ื™ื. ื‘ื“ืจืš ื›ืœืœ ืื ื—ื ื• ื ื™ืฆื•ืจ ืจืง ืžืขืจืš ืื—ื“ ืžืกื‘ื™ื‘ ืœ Buffer ืœืคื™ ืฆื•ืจืช ื”ืขื‘ื•ื“ื” ืฉื”ื›ื™ ืžืชืื™ืžื” ืœืงื•ื“ ืฉื ื›ืชื•ื‘. ื‘ื ื™ื™ืช ืžืขืจืš ืฉืœ ื‘ืชื™ื ืจืื™ื ื• ืื™ืš ืœื‘ื ื•ืช ืžืขืจืš ืฉืœ ื‘ืชื™ื ืžืชื•ืš Buffer ืื‘ืœ ื”ืืžืช ืฉืืคืฉืจ ืœื‘ื ื•ืช ืืช ืฉื ื™ ื”ื“ื‘ืจื™ื ื‘ื™ื—ื“ ืขื ื”ื‘ื ืื™ ืฉืœ ื”ืžืขืจืš. ื”ืงื•ื“ ื”ื‘ื ื‘ื•ื ื” ืžืขืจืš ืฉืœ 10 ื‘ืชื™ื ื•ื—ื•ืฆืฅ ื‘ืื•ืชื• ื’ื•ื“ืœ:
const a = new Uint8Array(10)
ืื ื™ ื™ื›ื•ืœ ืœื”ื’ื™ืข ืœื—ื•ืฆืฅ ืขื a.buffer, ืœืจืื•ืช ืืช ื”ื’ื•ื“ืœ ืขื a.length ื•ื›ืžื•ื‘ืŸ ืœืฉื ื•ืช ื‘ืชื™ื ื‘ืชื•ืš ื”ื—ื•ืฆืฅ ื‘ืืžืฆืขื•ืช ืฉื™ื ื•ื™ ื”ืชืื™ื. ืงืจื™ืื” ื•ื›ืชื™ื‘ื” ืœืžืขืจืš ืจืื™ื ื• ื›ื‘ืจ ืฉืืคืฉืจ ืœื›ืชื•ื‘ ืžืกืคืจื™ื ืœื—ื•ืฆืฅ ื“ืจืš ื”ืžืขืจืš ืขื:
a[0] = 1
a[1] = 2
ืขื•ื“ ื›ืžื” ืคื•ื ืงืฆื™ื•ืช ืฉืฉื•ื•ื” ืœื”ื›ื™ืจ: 1. fill - ืžืงื‘ืœ ืขืจืš ื•ืžื›ื ื™ืก ืื•ืชื• ืœื›ืœ ื”ืชืื™ื ื‘ืžืขืจืš. 2. at - ืžื—ื–ื™ืจ ืื™ื‘ืจ ืžื”ืžืขืจืš ื•ืชื•ืžืš ื‘ืื™ื ื“ืงืกื™ื ืฉืœื™ืœื™ื™ื ื›ื“ื™ ืœืงื‘ืœ ืื™ื‘ืจื™ื ืžื”ืกื•ืฃ 3. slice - ืžื—ื–ื™ืจ ืžืขืจืš ื—ื“ืฉ ืฉืžื›ื™ืœ ืจืง ื—ืœืง ืžืกื•ื™ื ืžื”ืžืขืจืš 4. with - ืžื—ื–ื™ืจ ืžืขืจืš ืขื ืขื“ื›ื•ืŸ ืœืชื ื‘ื•ื“ื“ ื‘ืื™ื ื“ืงืก ืฉื‘ื—ืจื ื• ื“ื•ื’ืžื” ืœืฉื™ืžื•ืฉ ื‘ืคื•ืงื ืฆื™ื•ืช ืืœื”:
> const a = new Uint8Array(8)
undefined
> a.fill(4)
Uint8Array(8) [
  4, 4, 4, 4,
  4, 4, 4, 4
]

> const b = a.slice(0, 4)
undefined
> a[0] = 10
10
> b
Uint8Array(4) [ 4, 4, 4, 4 ]

const c = a.with(0, 99);

> a
Uint8Array(8) [
  10, 4, 4, 4,
   4, 4, 4, 4
]
> b
Uint8Array(4) [ 4, 4, 4, 4 ]
> c
Uint8Array(8) [
  99, 4, 4, 4,
   4, 4, 4, 4
]

ToCode
1 419
ืื™ืš ื‘ื•ื—ืจื™ื ื‘ื™ืŸ ื”ื’ื™ื•ื ื™ ืœืžื•ืขื™ืœ? ื”ื˜ื™ืคื•ืก object ื‘ TypeScript ื ื›ื ืก ืœืฉืคื” ื‘ื’ื™ืจืกื” 2.2 ืฉืœ ื˜ื™ื™ืคืกืงืจื™ืคื˜ ื›ื“ื™ ืœืคืชื•ืจ ื‘ืขื™ื”. ื‘ืื•ืชื• ื–ืžืŸ ื“ืคื“ืคื ื™ื ื›ืœืœื• ืืช ื”ืคื•ื ืงืฆื™ื” Object.create ืฉื™ื•ืฆืจืช ืื•ื‘ื™ื™ืงื˜ ื—ื“ืฉ ืฉื”ืคืจื•ื˜ื•ื˜ื™ื™ืค ืฉืœื• ื”ื•ื ื”ืคืจืžื˜ืจ ืฉืงื™ื‘ืœื”, ืื‘ืœ ื”ืคืจืžื˜ืจ ืฉ create ื™ื›ืœื” ืœืงื‘ืœ ื”ื™ื” ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืžืฉื”ื• ืฉืื™ื ื• "ืคืจื™ืžื™ื˜ื™ื‘" ื›ืœื•ืžืจ ืžืฉื”ื• ืฉืืคืฉืจ ืœื”ื•ืกื™ืฃ ืœื• ืžืคืชื—ื•ืช, ืœื“ื•ื’ืžื” ืžืขืจืš, ืคื•ื ืงืฆื™ื” ืื• ืื•ื‘ื™ืงื˜. ืื– ืขื›ืฉื™ื• ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื”ื’ื“ื™ืจ ืืช ื”ื˜ื™ืคื•ืก:
create(o: object | null): any;
ื•ืจื’ืข ืื ื›ื‘ืจ ื”ื’ื“ืจื ื• ืืช create ืืคืฉืจ ืœื”ืžืฉื™ืš ืœืจื•ืฅ ืขื ืื•ืชื• ืจืขื™ื•ืŸ ื•ืœื”ื’ื“ื™ืจ ื’ื ืืช:
setPrototypeOf(o: any, proto: object | null): any;
ื•ื™ืฉ ืขื•ื“ ื›ืžื” ื”ื’ื“ืจื•ืช ืฉืืคืฉืจ ืœืžืฆื•ื ื‘ es5.d.ts ืฉื”ืžืฉื•ืชืฃ ืœื›ื•ืœืŸ ื”ื•ื ื” object | null. ื‘ืขืฆื ื™ืฉ ืจืง ืžืงื•ื ืื—ื“ ืฉ object ืžื•ืคื™ืข ื‘ืœื™ ื”ื—ื™ื‘ื•ืจ ืœ null ื•ื–ื” ื”ื˜ื™ืคื•ืก ืฉืœ ื”ืคื•ื ืงืฆื™ื” Object.keys:
keys(o: object): string[];
ืื‘ืœ ื‘ื ื™ื’ื•ื“ ืœืžื•ืคืขื™ื ื”ืื—ืจื™ื ืคื” ืืคืฉืจ ืœื˜ืขื•ืŸ ืฉื”ื˜ืขื•ืช ื”ื™ื ื“ื•ื•ืงื ืฉืœ ื˜ื™ื™ืคืกืงืจื™ืคื˜, ื›ื™ ืื™ืŸ ื‘ืขื™ื” ืœื”ืคืขื™ืœ keys ื’ื ืขืœ ืคืจื™ืžื™ื˜ื™ื‘ื™ื (ืœื ืฉื–ื” ืžื•ืขื™ืœ ืื‘ืœ ื–ื” ื›ื‘ืจ ืกื™ืคื•ืจ ืื—ืจ). ื‘ื—ื–ืจื” ืœืืชื’ืจ ืฉืœื ื• - ืœืžื” null ื”ื•ื ืœื ื—ืœืง ืž object? ืœืžื” ืœื”ื’ื“ื™ืจ ื˜ื™ืคื•ืก ื—ื“ืฉ ื›ืฉื›ืœ ืคืขื ืฉืžืฉืชืžืฉื™ื ื‘ื• ื–ื” ื›ื—ืœืง ืžื”ื—ื™ื‘ื•ืจ object | null? ื”ืชืฉื•ื‘ื” ื‘ืจื•ืจื” ื›ืฉื ื–ื›ืจื™ื ื‘ื’ื™ืฉื” ืฉืœ JavaScript ืœืกื™ืคื•ืจ. ื‘ JavaScript ื”ืคืงื•ื“ื” ื”ื–ื• ืžื—ื–ื™ืจื” ืขืจืš ืืžืช:
typeof null === 'object'
ื”ื˜ื™ืคื•ืก ืฉืœ null ื”ื•ื ืžืžืฉ object. ื–ื” ื ื•ื—, ืžื•ืขื™ืœ ื•ืžื‘ืœื‘ืœ ืžืื•ื“. ื˜ื™ื™ืคืกืงืจื™ืคื˜ ืจืฆื• ืœืชืงืŸ ืืช ื”ืขื•ืœื ื•ื”ืขื“ื™ืคื• ืœื”ื™ื•ืช ืžืคื•ืจืฉื™ื ื‘ืžืงืจื” ื”ื–ื”. ื™ื•ืชืจ ืžืฉืฆืจื™ืš ืœื”ื—ืœื™ื˜ ืžื™ ืฆื•ื“ืง ืžืขื ื™ื™ืŸ ืœืจืื•ืช ืืช ื”ื‘ื“ืœื™ ื”ื’ื™ืฉื•ืช.

ToCode
1 419
ืื™ืš ื‘ื•ื—ืจื™ื ื‘ื™ืŸ ื”ื’ื™ื•ื ื™ ืœืžื•ืขื™ืœ? ื”ื˜ื™ืคื•ืก object ื‘ TypeScript ื ื›ื ืก ืœืฉืคื” ื‘ื’ื™ืจืกื” 2.2 ืฉืœ ื˜ื™ื™ืคืกืงืจื™ืคื˜ ื›ื“ื™ ืœืคืชื•ืจ ื‘ืขื™ื”. ื‘ืื•ืชื• ื–ืžืŸ ื“ืคื“ืคื ื™ื ื›ืœืœื• ืืช ื”ืคื•ื ืงืฆื™ื” Object.create ืฉื™ื•ืฆืจืช ืื•ื‘ื™ื™ืงื˜ ื—ื“ืฉ ืฉื”ืคืจื•ื˜ื•ื˜ื™ื™ืค ืฉืœื• ื”ื•ื ื”ืคืจืžื˜ืจ ืฉืงื™ื‘ืœื”, ืื‘ืœ ื”ืคืจืžื˜ืจ ืฉ create ื™ื›ืœื” ืœืงื‘ืœ ื”ื™ื” ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืžืฉื”ื• ืฉืื™ื ื• "ืคืจื™ืžื™ื˜ื™ื‘" ื›ืœื•ืžืจ ืžืฉื”ื• ืฉืืคืฉืจ ืœื”ื•ืกื™ืฃ ืœื• ืžืคืชื—ื•ืช, ืœื“ื•ื’ืžื” ืžืขืจืš, ืคื•ื ืงืฆื™ื” ืื• ืื•ื‘ื™ืงื˜. ืื– ืขื›ืฉื™ื• ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื”ื’ื“ื™ืจ ืืช ื”ื˜ื™ืคื•ืก:
create(o: object | null): any;
ื•ืจื’ืข ืื ื›ื‘ืจ ื”ื’ื“ืจื ื• ืืช create ืืคืฉืจ ืœื”ืžืฉื™ืš ืœืจื•ืฅ ืขื ืื•ืชื• ืจืขื™ื•ืŸ ื•ืœื”ื’ื“ื™ืจ ื’ื ืืช:
setPrototypeOf(o: any, proto: object | null): any;
ื•ื™ืฉ ืขื•ื“ ื›ืžื” ื”ื’ื“ืจื•ืช ืฉืืคืฉืจ ืœืžืฆื•ื ื‘ es5.d.ts ืฉื”ืžืฉื•ืชืฃ ืœื›ื•ืœืŸ ื”ื•ื ื” object | null. ื‘ืขืฆื ื™ืฉ ืจืง ืžืงื•ื ืื—ื“ ืฉ object ืžื•ืคื™ืข ื‘ืœื™ ื”ื—ื™ื‘ื•ืจ ืœ null ื•ื–ื” ื”ื˜ื™ืคื•ืก ืฉืœ ื”ืคื•ื ืงืฆื™ื” Object.keys:
keys(o: object): string[];
ืื‘ืœ ื‘ื ื™ื’ื•ื“ ืœืžื•ืคืขื™ื ื”ืื—ืจื™ื ืคื” ืืคืฉืจ ืœื˜ืขื•ืŸ ืฉื”ื˜ืขื•ืช ื”ื™ื ื“ื•ื•ืงื ืฉืœ ื˜ื™ื™ืคืกืงืจื™ืคื˜, ื›ื™ ืื™ืŸ ื‘ืขื™ื” ืœื”ืคืขื™ืœ keys ื’ื ืขืœ ืคืจื™ืžื™ื˜ื™ื‘ื™ื (ืœื ืฉื–ื” ืžื•ืขื™ืœ ืื‘ืœ ื–ื” ื›ื‘ืจ ืกื™ืคื•ืจ ืื—ืจ). ื‘ื—ื–ืจื” ืœืืชื’ืจ ืฉืœื ื• - ืœืžื” null ื”ื•ื ืœื ื—ืœืง ืž object? ืœืžื” ืœื”ื’ื“ื™ืจ ื˜ื™ืคื•ืก ื—ื“ืฉ ื›ืฉื›ืœ ืคืขื ืฉืžืฉืชืžืฉื™ื ื‘ื• ื–ื” ื›ื—ืœืง ืžื”ื—ื™ื‘ื•ืจ object | null? ื”ืชืฉื•ื‘ื” ื‘ืจื•ืจื” ื›ืฉื ื–ื›ืจื™ื ื‘ื’ื™ืฉื” ืฉืœ JavaScript ืœืกื™ืคื•ืจ. ื‘ JavaScript ื”ืคืงื•ื“ื” ื”ื–ื• ืžื—ื–ื™ืจื” ืขืจืš ืืžืช:
typeof null === 'object'
ื”ื˜ื™ืคื•ืก ืฉืœ null ื”ื•ื ืžืžืฉ object. ื–ื” ื ื•ื—, ืžื•ืขื™ืœ ื•ืžื‘ืœื‘ืœ ืžืื•ื“. ื˜ื™ื™ืคืกืงืจื™ืคื˜ ืจืฆื• ืœืชืงืŸ ืืช ื”ืขื•ืœื ื•ื”ืขื“ื™ืคื• ืœื”ื™ื•ืช ืžืคื•ืจืฉื™ื ื‘ืžืงืจื” ื”ื–ื”. ื™ื•ืชืจ ืžืฉืฆืจื™ืš ืœื”ื—ืœื™ื˜ ืžื™ ืฆื•ื“ืง ืžืขื ื™ื™ืŸ ืœืจืื•ืช ืืช ื”ื‘ื“ืœื™ ื”ื’ื™ืฉื•ืช.