ToCode
Kanalga Telegramโda oโtish
ืืืคืื ืงืฆืจืื ืืืชืื ืชืื ืืืช ืื ืื ืคืจืง
Ko'proq ko'rsatish1 419
Obunachilar
Ma'lumot yo'q24 soatlar
Ma'lumot yo'q7 kunlar
-530 kunlar
Postlar arxiv
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/qBGWQEw1 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. ืืืืก ืื ืฉืื ืฉืืืืืื ืฉืชืืืืื ืืขืืืื ืืืจืืื ืืื ืจืง ืืืืื ืืืชื ืืืื ืืืฆืื ืืจืืื "ืืงืฆืจ ืชืืืืืื" ืขื ืืฉืืื ืืืืืช. ืงืืฆืืจ ืฉื ืฉืื ืขืืื ืืช ืืืืืจ ืืขืื ืืืืฉืื ืื ืฉื ืื.
ืืคืืื ืืืืก ืืจืืข ืืื ืืืื ืืืจืืก ืืืฆืจ, ืืืืขื ืชืืื ืืฉืื ืื ื ืืืื ืื ืฉืขืฉืื ื ืืขืืช ืื ืืืจ ืืืืืจ ืืืื ืืชืงื. ืืืืืื ืฉืืืชื ืืจื ืงืื ืืืืืช ืืช ืืขืชืื ืืื ืืื ืชืืื ืจืืืื ืืช ืขืืืื ืืชืืฉืื ืื ืืื ืื ืื ืืื ืคืืืช ืจืข ืฉืืฆืื ื.
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 ืืื ืฉืื ืืืงืฉืื ืืื ืืืื ืืชืืื ืืืชืืื ืืืจืืืืช ืืชืื ืืจืืืืช.1 419
ืืขืจื ืืืืืืื
ืฉืืื ืืขื ืืื ืช ืฉืื ื ืืชืื ื ืืฉืืื ืืคืขื ืืืื ืฉืฆืจืื ืืืืืก ืื ืืื ืืคืจืืืงื-
ืื ืืขืจื ืฉืืช ืืืืื ืืคืจืืืงื?
ืื ืืืคื ืืืชื ืืื ืืื ืฉืืื ืืชืืื ืืืืื ืืช ืืขืจื ืืื?
ืื ืืื'ื ืื ืฉืื?
ืืืืืจื ืืื ืืืืืง Alignment - ืื ืจืง ืืื ืืื ืืื ืืชืืื ืืคืจืืืงื, ืืื ืืืชืจ ืืื ืืื ืืื ืื ืืื ืจืืืื ืืช ืืืชืืื ืฉืืื, ืืื ืื ืืืื ืขื ืื'ื ืื. ืืื ืื ื ืจืืฆื ืื'ื ืื. ืื ืืฉืื ืื ืืื ืฉืจืืฆื ืืืืื ืืฉืื ืืฉืืืื ืื ื ืืืื ืืืืื ืฉืืคืจืืืงื ืฉืื ืืื ืืืงืื ืืื ืืื ืืฉืืืื ืืชืจืื ืืืืืื. ืืฉืื ืื ืืื ืฉืจืง ืจืืฆื ืืืฉืชืื ืื ื ืื ืืืื ืืืขืช ืืื ืืื ืืจืืืฉ ืืืจื ืฉืืฉืชืื.
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 ืืืืชื ืฉืฆืจืื ืืืืืื ืืืืื: ืืืืืช ืคืืชืื ืื ืืืฆืืขืื.1 419
ืขืืฉืื ืืืืจื ืืืชืืืืืช ืฉืื ื - ืืื ืื ืื ืืช ืืืืืข ืฉื ืฉืืจ ืืฆื ืืงืื ืืฆืืจื ืืืืืขืช ืืชืื ื Hooks ืื ืืคืจืืืืืืจืง ืื ืืืื ืกืืืื ืฆื ืืงืื ืืกืืืจ? ืืื ืชืืื ืืฉืืืืช ืืืื ืืื ืชืฉืืื ืื ืืฉืืขืืช. ืื ืืืื ืฉืื ืืื ืืืืืจ ืืคืจืืืืืืจืง ืฆื ืืงืื ืืื ืืงืื ืฉืืืื ืืืื ืืืชืจ ืืชืืืื ืื. ืืืืืื ืฉื ืืืจืืขื Server Sent Events ืงื ืืืืืื ืฉืื ื ืืจืฆื ืืืืฉืื ืืืงืฉืื ืืืืจืืขืื ืื ืืื ืงืืืคืื ื ืื ืขื ืืืกื. ืืืฉื ืื ืงืืืคืื ื ืื ืืฆืืื ืจืฉืืืช ืขืืืื ืื ืืืฉืชืืฉ ืขืืืจ ืืืกื ืืืจ, ืื ืืฉืื ื ืืืืจ ืืืกื ืจืฉืืืช ืืขืืืื ืื ืื ื ืืจืื ืฉื ืืช ืืขืืืื ืื ืฉื ืฉืืื ืื ืืืื ืฉืืืืชื ืืืกื ืืืืจ.
ืืื ืขื ืืืช ืืื ืกืคืง ืฉืืืงืจืื ืคืฉืืืื ื Hook ืืืืืื ืืื ืฉืคืฉืื ืืืืืงืื ืืืืื ืืจื ื ืืืกื ืืชืืืช ืงืื ืืืืื ืืงืฆืจ ืืื ื ืคืืชืื.
ืื ืืขืชืื? ืืืื ืืืฉื ืขืืื ืืื ืืื ืืืชืจ?
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>
);
}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
]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. ืื ื ืื, ืืืขืื ืืืืืื ืืืื. ืืืืคืกืงืจืืคื ืจืฆื ืืชืงื ืืช ืืขืืื ืืืขืืืคื ืืืืืช ืืคืืจืฉืื ืืืงืจื ืืื. ืืืชืจ ืืฉืฆืจืื ืืืืืื ืื ืฆืืืง ืืขื ืืื ืืจืืืช ืืช ืืืืื ืืืืฉืืช.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. ืื ื ืื, ืืืขืื ืืืืืื ืืืื. ืืืืคืกืงืจืืคื ืจืฆื ืืชืงื ืืช ืืขืืื ืืืขืืืคื ืืืืืช ืืคืืจืฉืื ืืืงืจื ืืื. ืืืชืจ ืืฉืฆืจืื ืืืืืื ืื ืฆืืืง ืืขื ืืื ืืจืืืช ืืช ืืืืื ืืืืฉืืช.
Endi mavjud! Telegram Tadqiqoti 2025 โ yilning asosiy insaytlari 
