ToCode
Kanalga Telegramโda oโtish
ืืืคืื ืงืฆืจืื ืืืชืื ืชืื ืืืช ืื ืื ืคืจืง
Ko'proq ko'rsatish1 419
Obunachilar
Ma'lumot yo'q24 soatlar
Ma'lumot yo'q7 kunlar
+130 kunlar
Postlar arxiv
1 419
# ืืื ืืืฉืชืืฉ ื Web Worker ืืื ืืฉืคืจ ืืืฆืืขืื ืืงืืืคืื ื ืืช ืจืืืงื
ืจืื ืืืื ืืืฉืืื Front End ืื ืขืืฉืื ืขืืืื ืืืฉืืืืช ืืืชืจ ืืื ืงืฉื, ืืืื ืืช ืจืื ืฉืืคืืจื ืืืืฆืืขืื ืืจืืืงื ืืคืฉืจ ืืคืชืืจ ืขื ืฆืืฆืื ืงืจืืืืช ืืืฉืจืช ืื ืฆืืฆืื render-ืื. ืืื ืืื ืคืขื ืื ืืฉ ืื ื ืงืืืคืื ื ืื ืฉืฆืจืืื ืืขืฉืืช ืขืืืื ืืืฉืืืืช, ืืืฉืื ืงืืจื ืืืื ืืืขืช ืื ืืขืฉืืช - ืืืชืฉืืื ืืคืฉืืื ืืื Web Worker.
ื ืืงื ืืืืืื ืืช ืืงืืืคืื ื ืื ืืืื ืฉืืฆืืื ืืช ืืกืคืจ ืืืกืคืจืื ืืจืืฉืื ืืื ืขื ืืืืืื:
import { useState } from 'react';
function isPrime(n) {
for (let i=2; i < n/2; i++) {
if (n % i === 0) {
return false;
}
}
return true;
}
function calculatePrimesUntilMillion() {
let count = 0;
console.log('Start');
for (let i=2; i < 1000000; i++) {
if (isPrime(i)) {
count += 1;
}
}
console.log('Ready');
return count;
}
function App() {
const [_, forceRender] = useState(0);
return (
<div className="App">
<p>There are {calculatePrimesUntilMillion()} prime numbers < 1,000,000</p>
<button onClick={() => forceRender(v => !v)}>Calculate again</button>
</div>
);
}
export default App;
ืื ื ืืชืืชื ืืื ืืช ืืงืื ืฉืกืืคืจ ืืื ื ืืขืฉื ืืื ืกืคืืืืจ - ืืืช ืืืฉ ืื ืืืจื ืืื ืืขืืื ืืกืคืืจ ืืกืคืจืื ืจืืฉืื ืืื. ืืืขืฉื ืืื ืืกืคืืง ืื ืืขืืื ืืื ืฉืื ืชืจืืฆื ืืช ืืงืืืคืื ื ืื ืืืืช ืขื ืืืืฉื ืชืืืื ืืืจืืืฉ ืืื ืฉื ืืืช ืืืืืช ืฉืืืคืืคื ืืืฉ "ืชืงืืข", ืืืคืืื ืื ืืืื ืืฉืืฉื ืื ืืช ืืืื ืืืืื. ืื ืืืื ืืื ืืื ืชืงืืื ืืืจืื ืืช ืืืืืขื ืฉืืืื ื ืชืงืข ืืืื ืืฆืืข ืืื ืืกืืืจ ืืืชื.
ืื ืื ืงืืจื ืืืื ืฉืืคืื ืงืฆืื calculatePrimesUntilMillion ืืืงื ืืืชืจ ืืื ืืื ืืจืืฅ, ืืืืื ืืื ืืื ืชืืงืขืช ืืช ืื ืืืฉืง ืืืฉืชืืฉ. ืืจืืจ ืฉืืืจื ืืื ืืืื ืืคืชืืจ ืืช ืืืขืื ืืืงืจื ืืื ืืื ืืชืงื ืืช ืืงืื ืื ืฉืืจืืฅ ืืืชืจ ืืืจ, ืืื ืืืงืจื ืืืืื ืืคืขืืื ืืชื ืืืืช ืฆืจืืืื ืืขืฉืืช ืืจืื ืขืืืื. ืืฉืืื ืื ืืืืืง ืืฉ ืื ื ืืช ื Web Worker.
ืืื ืืืจืงืจ ืืื ืืจื ืืืคืขืื ืงืื ืืืฉืืื ื Thread ืืืจ ืืืงืื ืืื ื ืชืฉืืื. ืืจืืืงื ืื ืื ื ื ืฉืชืืฉ ื useEffect ืืื ืืฉืืื ืืืืขื ื Worker ืฉืื ื, ื Worker ืืขืฉื ืืช ืืืืฉืื ืืฆืืจื ืืกืื ืืจืื ืืช ืืืกืืฃ ื ืฉืชืืฉ ืืืฉืชื ื State ืืื ืืฉืืืจ ืืช ืืชืืฆืื ืืืืฆืื ืืืชื. ืืขืฆื Web Worker ืืืคืื ืืช ืืงืื ืฉืื ื ืืืื ืฉ"ืชืืงืข" ืืช ืืืคืืคื ืืงืื ืืกืื ืืจืื ื ืจืืื ืฉืืืื ืืืฉืื ืฉืืงืจื.
ืื ื ืืฉืชืืฉ ื create-react-app ืืืืจืกื ืืืืฉื ืืืืชืจ ืืืื ืืฉืชืืฉ ื webpack 5 ืืฉื ืืชืืืื ื Web Worker ืืื ืืืื ืืช. ืืฉืืื ืืืคืื ืืช ืืคืจืืืงื ืฉืื ืืืฉืชืืฉ ื Web Worker ืื ื ืฆืจืื:
1. ืืืฆืืจ ืงืืืฅ ืืืฉ ืืฉื primes.js ืขื ืืชืืื ืืื:
function isPrime(n) {
for (let i=2; i < n/2; i++) {
if (n % i === 0) {
return false;
}
}
return true;
}
function calculatePrimesUntilMillion() {
let count = 0;
console.log('Start');
for (let i=2; i < 1000000; i++) {
if (isPrime(i)) {
count += 1;
postMessage({ count });
}
}
console.log('Ready');
return count;
}
onmessage = function(_ev) {
const count = calculatePrimesUntilMillion();
postMessage({ count });
}
2. ืืขืืื ืืช ืงืื ืืงืืืคืื ื ืื ืืื ืืืขืื ืืช ื Worker:
const worker = new Worker(new URL('./primes.js', import.meta.url));
ืืขืืื ืืช ืืงืืืคืื ื ืื ืขืฆืื ืื ืฉืชืฉืชืืฉ ื Worker, ืืืืืจ ืชืฉืื ืื ืืืืขืืช ืืชืงืื ืืื ื ืขืืืื ืื:
function App() {
const [forceRender, setForceRender] = useState(0);
const [primesCount, setPrimesCount] = useState(0);
useEffect(() => {
worker.onmessage = function(ev) {
setPrimesCount(ev.data.count);
};
worker.postMessage({});
}, [forceRender]);
return (
<div className="App">
<p>There are {primesCount} prime numbers < 1,000,000</p>
<button onClick={() => setForceRender(v => !v)}>Calculate again</button>
</div>
);
}
ืืืคืขืื ืืืืจืกื ืืืืฉื ืื ืจืง ืฉืืืคืืคื ืืืฉืื ืืืืื ืืืื ืืืืฉืื, ืืื ืฉืื ืื ื ืื ืจืืืื ืืช ืืืกืคืจืื ืขืืืื - ืื ืื ืคืขื ืฉื Worker ืืืฆื ืืกืคืจ ืจืืฉืื ื ืืืฉ ืืื ืฉืืื Post Message ืฉืืืืข ืืงืืืคืื ื ืื ืืืืจื ืืขืืืื ืืืฉืชื ื primesCount.
ืื ืืชื ืขืืืืื ืืืืจืกืืืช ืืฉื ืืช ืืืชืจ ืฉื create-react-app ืื ืืืืคืืง, ืฉืืื ืืืืืง ืืช ืืกืคืจืื https://github.com/developit/workerize-loader ืฉืืืคืฉืจืช ืืืขืื Web Worker ืื ืืืืืคืืง 4.1 419
# ืืขืื ืืืืื
ืืฉืื ืื ื ืืงืฉืืืื ืืื ืฉืงืืจื ืืชืขืฉืื ืื ืืกืชืืืื ืืจืฉืช ืขื ืื ืืื ื Best Practices ืื ืื ื ืขืืืืื ืืืขืืช ืืืืฉืื ืฉ-
1. ืืืื ืืืชืืื Micro Services, ืืื ืืืื ืื ืืืืฉื.
2. ืืฆื ืืืื ืืฉ ืืืืงืืช (ืืืืื + ืงืฆื ืืงืฆื).
3. ืืืื ืขืืืืื ืขื ืืืืจืกืืืช ืืืืฉืืช ืืืืชืจ ืฉื ืืชืืืืืช, ืืชืงืื ืื ืืืื ืืืืื ืืืื ืืืืฆืขืื Pen Testing ืืคื ืืืจืืืช ืืืฆืจื.
4. ืืืืื ืืฉ ืืืืืืื ืืชืืงืชืงืื ืืคืขื ืืืืืฉ ืื ืขืืฉืื ืชืจืืื ืฉืืืืจ ืืืืืื.
5. ืืืื ืืฉืชืืฉืื ื CI ืืืืืืงืื ืื ืื ืื Deployment ืืืืืืื ืฉืืืืข ืืืจืืฅ ืืช ืืืืืงืืช ืืืืขืืืจ ืืืจืกืืืช ืืคืจืืืงืฉื ืืื ืืืข ืื.
6. ืืืืื ืืฉ ืืขืจืืืช ื ืืืืจ ืืชืืืืืืช ืฉืืืืืช ืคืืจืฆืืช ืืฉืจืชืื ืืืื ืืืช.
7. ืืืื ืืืืืงืื ืชืืขืื ืขืืื ื ืฉื ืืืขืจืืช ืื ืฉืืชืื ืชืื ืืืฉืื ืืืืืื ืืงืืืช ืืืืื ืก ืืงืื.
8. ืืืื ืืืืงืื ืงืื ืฉืื ืืฉืชืืฉืื ืื.
9. ืืืื ืฉืืืืื ืืืื ืืืืืืืช ืืื ืื ืขืืืืื.
ืื ื ืืืื ืฉืืฉ ืืชืื ืชืื ืฉืืืืืื ืืกืื "ืื" ืขื ืื ืืจืฉืืื ืืื, ืืื ืืืืช ืฉืืขืืื ืื ืคืืฉืชื ืืืชื. ืืืืจื ืฉื ืื ืืืชืืืช ืืืื ืืืื ืืจื ื ืืื ืื ืฉื ืจืืืฉ ืจืข, ืืื ืฉืชืืื ืืืื ืื ื ืืื ืืขืื ืืื ืจืขืืื ืืฆืขื ืืื. ืืื ืื ืื ืืืืจ ืฉืืืืืื ืขืืฉืื ืืงืืช ืืืชื.
ืืื ืกืขืืฃ ืืื ืืฉ ืขืืืช. ืืื ืฉืื ืืคืฉืจ ืืืชืืื ื ืกืืขื ืืืืืื ืืืืฉื, ืื ืคืจืืืงื ืฆืจืื ืืช ืืงืฆื ืืืืื ืฉืื. ืขื ืฉืฆืืืจืื ืืืืจืืช ืืกืคืืง ืืืฉืืืจ ืืช ืืจืฉืืื ืืื ืืขืื ืืื ืืืืืืื ืขื ืขืฆืืื ืืืจืืฉ ืื ืืืื ืืืืืื ืืื.
1 419
# ืืื ืืงืื ืืืืงืจ
ืืฉืืื ืืืืื ืืฉืื ืืืฉ, ืืื ืืช ืืฉืื ืืืฉ ืื ืืืืฅ ืืจืื ืืืฉ ืฆืจืื ืื ืจืืื. ืื ืจืืื, ืืืืืจ ืืื ืืขืฉืืช ืืช ืืืืจ ืืื ืฉืฆืจืื ืืขืฉืืช ืื ืืื ืืฉืืื ืืืืืข ืืืืจื ืฉืืืชื ืจืืฆืื ืืืฉืื. ืืช ืืื ืจืืื ืืคืฉืจ ืืืฉืื ืืืื ืื ืืืชืจ ืืืืงืืจืืช ืืืืื:
1. ืืืืืืช - ืืืืื ืขื ืืื ืืืืื ืืจืื ืืืจื ืฉืืืข ืืช ืืืืจ ืืื ืฉืื ื ืืืื (ืืืื ืขื ืืขืืืื ืฉืชืืื ืื, ืขื ืืืืื ืฉืืืื ืืขืฉืืช)
2. ืืืฅ ืืืจืชื - ืื ืืืืจืื ื ืจืฉืื ืืืื ืืืืจืื ืืืฉืืงืื ืืื ืืืคืกืงืืช, ืื ืืืื ืฉืื ืื ื ืืฆืืจืฃ...
3. ืืืืก ืืืจ ืื - ืืฉืืฉ ืืืจื ืงืื ืงืจืืืช ืฉืฆืจืื ืืืฆืข, ืืืืืื ืคืจืืืงื ืืขืืืื.
4. ืื ืืขื ืืื ืืืชื - ืื ืืฉืื ื ืืชืขื ืืื ืืืฉืื ืืืฉืงืขื ื ืจืืืช ืืจืื ืืืชืจ ืงืื.
5. ืจืฆืื ืืืจืฉืื ืืืืคืชืืข - ืืฉืืืจื ืืืฆืื ื ืฉืืฉืื ืื ืืืื ืืขืจืื ืืืฉื ืืกืืื, ืืฉ ืกืืืื ืืื ืฉืืฆืืื ืืืชืืื ืืื ืืืจืฉืื ืืืชื/ืืืชื.
6. ืื ืื ืฉืื ืืืื ื ืขืืฉืื ืืืจืื ืืืื - ืืฉืื ื ืืฆืคื ืืขืฆืื ืืืชื ืืืืช ืืกืืืืช ืฉืืชืืืื ืืืืืื ืืขืฆืื ืฉืื.
ืื ืืชื ืื ืกืื ืืขืฉืืช ืฉืื ืื ืืื ืืฆืืืืื ืืืชืืื, ืืืจืืง ืืื ืืื ืืืคืฉ ืืงืืจืืช ืื ืจืืื ื ืืกืคืื (ืืคืฉืจ ืืืชืจ ืืืื) ืฉืืขืืจื ืื ื ืืขืืืจ ืืช ืืงืืฉื ืืจืืฉืื ื.
1 419
# ืืืคืืืืืืช
ืืืขืืช ืงื ืืชื ืืืื ืืช ืืกืคืจ ืืื ื ืืื ืืืืืืื. ื ื, ืจืฆืืชื ืืงื ืืช ืกืคืจ ืืกืืื ืืืืืฉืื ืืืืชื ืืืื ืฉืื ื ืืขืืื ืฉืื ืืคืืื ืฉืืืืชื ืืขืืื ืฉื ืกืคืจ ืืืจ ืืืคื ืืฉื ืฉืืืืชื ืขื ืืกืคืจ ืฉืื ืจืฆืืชื.
ืขืืฉืื ืื ื ืขืื ืืืืื ืืื ืืืช ืื ืืคืขื ืืจืืฉืื ื ืฉืื ืงืืจื ืื. ืื ื ืืืืจ ืืช ืืืืื ืืืืืืื, ืืงืืืืชื ืืื ืืืจ ืื ืืขื ืืืืจืื ืืขืืจ ืืคืืื ืขื ืืืจืื ืืจืื ืืืชืจ ืืืืจืื. ืืื ืืื ืืืฉืื ืคืขืืืื ืฉืืืชื ืืืืืื ืืชืืืื ืืืกืืืจ ืืช ืืืฆื ืืืืฉืืชื ืืงื ืืช ืืช ืืกืคืจ ืฉืจืฆืืชื, ืืื ืืืืืช ืืชืฉืืื ืฉื ืืชืืืื ืื ืืืืืื. ืืื ืืื ืืืืืื ืืืืข.
ืืืืืืช ืืืชืงืื ืืื ืืืืืช ืืจืืืช ืฉืืฆืขื ืืงืืื ืืฆืืื ืืื ืืืง ืืื ืฉืื ืื ื ืงืืจืืื ืืืคืืืืืืช. ืืื ืฉืืฉ ืื ื ืคืืืช ื ืกืืื ืื ืืฉื ืืกืืื ืื ื ืืจืฉืช ืื ื ืืืืื ืืืชืจ ืฉื ืืืคืืืืืืช ืืื ืืืชืงืื, ืืืื ืจืง ืืืคืืช ืืืชืจ ืืฉืืื ืืฉืื ืื ื ืืกืชืืืื ืขื ืืืจืื ืืืืืื ืืืชืจ ืืกืคืจืื ืงืืืืื:
1. ืืืคืืืืืืช ืืืคืฉืจืช ืื ืืืืฉืื ืืืฉืงืืข ืืคืืชืื ืืคืจืืืงื ืฉืื, ืื ืื ืืื ืขืืืื ืื ืืื ืืก ืืฃ ืืงืื. ืื ื ืืืืข ืฉืืกืืฃ ืืืฆื ืืช ืืืจื ืืืืืจืืช, ืืืืื ืฉืืคืจืืืงื ืืืื ืืืื ืืฉืื ืืงืจื.
2. ืืืคืืืืืืช ืืืคืฉืจืช ืื ืืืืฉืื ืืืืื ืืืชืจืื JavaScript, ืื ืื ืืงืืจืืช ืืืื ืฉืื ืขืืืื ืื ืืกืคืืง ืืืืื ืืื ืืืืืข ืืจืืืื ืขืืืื. ืื ื ืืืืข ืฉืืกืืฃ ืืฆืืื ืืืฆืื ืืช ืืืจื ืืจืืืื ืืช ืืืืื ืฉืืืืข ืืืื ืืฉืื ืืงืจื.
3. ืืืคืืืืืืช ืืืคืฉืจืช ืื ืืืงืืจ ืืขืืืง ืืืืื ืืกืืื ืืคืืชืจืื ืืื ืืืืื ืฉืืืื ืื ืื ืืืืืื ืื ืืื. ืื ื ืืืืข ืฉืืกืืฃ ืืืฆื ืืช ืืืื ืืืืจื ืืืืืข ืืืื ืืื ืืืืื ืก ืืขืืื ืืงืืจื.
ืืงืฆืจื ืืืคืืืืืืช ืืืคืฉืจืช ืื ื ืืืชืงืื ืขื ืืชืืืื ืฉืขืืฉืื ืืืจืฉ ืืช ืชืฉืืืช ืืื ืฉืื ื (ืงื ืืืช ืืกืคืจ ืื ืืื), ืืืื ืื ืฉืชืืืืืื ืืืจืื ืืกืชืืจื (ืืคืืื ืฉืืืื ืื ืืืืจื ืืจืืจ ืขืืฉืื ืืื).
ืืืจืืข ืฉืืื ื ืืื ืืืืคืืืืืืช ืืฉืคืืขื ืขื ืืืชื ืืืืช ืืืื ืืื ืืคืฉืจ ืืืชืืื ืืชืจืื ืืืชื: ืื ืื ืืชื ืื ืืืื ืืืื ืฉืชืงืื ืืืืื, ืืื ืืืช ืืงื ืืช ืืช ืืกืคืจ ืื ืืื. ืื ืื ืืช ืืจืืืฉื ืฉืืขืืื ืื ืืืืื ื ืืืชื ืืจืืืื ืขืืืื, ืืื ืืืช ืืืืฉืื ืืืืื ืื ืืื ืืคื ืฉืขืื ืืื ืืคื ืืืืืืฆืื.
ืื ืืืชื ืืืืช ืืฉืคืืขื ืขื ืืืืฉื, ืืืืืจื ืืื ืืืชื ืืืืช ืืืืคืืืืืช ืืืืืฉื ืืืืคืืืืืช ืขืืืจืืช ืื ื ืืืฉืงืืข ืืชืืืืืื ืื ืืื ืื ืืืืืืช ืื ืืจืฉืช ืืฉืืื ืืืชืงืื.
1 419
# ืืืื ืืื ืืื ืืชืงื ืืืืงื
ืืืื ืืื ืืื ืืชืงื ืืืืงื ืืื ืืืืืง ืืจืืข ืฉืืชืืช ืืช ืืงืื ืฉืฉืืจ ืืืชื. ืืื ืฉืืชืจืืงืื ืืืืชื ืืจืืข ืงืืจืื ืฉื ื ืืืจืื ืจืขืื:
1. ืืชื ืฉืืื ืื ืขืฉืืช ืืืื ืื ืฉืืจ ืืช ืืืืืงื.
2. ืืืืงืืช ื ืืกืคืืช ื ืฉืืจืืช ืืืื ืฉืื ืืืื ืืืฉืื.
ืืืขื ืืื ืคืจืืืงื, ืื ืื ื ืืขืืืจ ืืืืฉืืื ืืื ืืืจืืฅ ืืช ืืืืืงืืช - ืืคืืื ืื ืืืืช ืื ืฉืืจืชื ืืืื ืืืืื ืช ืืืืืืงื ืฉื ืืืขืจืืช - ืขืืืื ืืืื ืื ืื ืืขื ืืืืงืืช ืฉืืืจืืช ืืชืงื.
ืืขืืืื ืขื ืืื ืงื ืืืืฆืจ ืชืืืื ืขืืืื ืืืืืืื ืฉืืจืืฅ ืืช ืืืืืงืืช ืืคื ื ืืงืืืื. ืืื ืื ืฉืืชื ืืคืจืืืงื node ืืืจืืฆืื ืืช ืืืืืงืืช ืขื
npm test ืื ืื ืฉืฆืจืื ืืขืฉืืช ืื ืืืฆืืจ ืกืงืจืืคื ืืืฉ ืืชืืงืืืช .git/hooks ืืืงืจืื ืื ืืฉื pre-commit, ืืชืืื ืืืชืื ืืช ืืชืืื:
#!/bin/sh
echo "*****Running unit tests******"
git stash -q --keep-index
npm test
status=$?
git stash pop -q
exit $status
ืืืชืช ืื ืืจืฉืืืช ืืจืฆื:
$ chmod +x .git/hooks/pre-commit
ืืคืขื ืืืื ืฉืชื ืกื ืืขืฉืืช commit ืืงืื ืืื ืงืืื ืื ืืจืืฅ ืืช ืืืืืงืืช ืืืฆืขืง ืขืืืื ืื ืืฉืื ื ืืฉื.
ื .ื. ืืคืจืืืงื ืฉื ืืฆืจ ืขื create-react-app ืฆืจืื ืืืคืขืื ืืช ืฉืืจืช ืืจืฆืช ืืืืืงืืช ืืืืงืื ืืืชืื npm test ื ืืชืื ืฉื npm test -- --watchAll=false ืืื ืืืจืืฅ ืืช ืืืืืงืืช ืคืขื ืืืช ืืื ืืขืงืื ืืืจื ืฉืื ืืืื ืืงืืฆืื.1 419
# ืืื ืืืืืง Custom Hook ืืจืืืงื
ืกืคืจืืืช react-testing-library ืืกืคืงืช ืืืื ืืฆืืื ืื ืืืืืงืช ืงืืืคืื ื ืืืช - ืืื ืื ืขืืฉืื ืขื Custom Hooks? ืืื ืขืืื ื ืืืฉืืืจ ืืืชื ืืืืจืื ืืืืฉืืจ ืืื ืืืืงืืช?
ืืกืชืืจ ืฉืืฉ ืคืืชืจืื ืืืคืืื ืคืฉืื - ืืืงืื ืืืชืื ืงืื ืฉืืืืง ืืช ื Hook, ืื ืื ื ืืืชืืื ืงืืืคืื ื ืื ืฉืืฉืชืืฉืช ื Hook ืืืืืงืื ืืช ืืงืืืคืื ื ืื. ืืืื ื ืจืื ืืืืื.
## ื Hook ืฉืื ื ืจืืฆื ืืืืืง: useLocalStorage
ืืื ืืืืงืื ืืืืืืื ืขืืื ืืจืืืงื ื ืจืื ืืื useState ืืื ืืืกืืฃ ืขืืื ืืคืงื ืื ืฉืืืืืข ืื ืืืฉืืจ ื Local Storage. ืืคืขื ืืืื ืฉืืคืขืืื ืืช ืืงืืืคืื ื ืื ืืื ืชืืื ืืืขืื ืืช ืืืืืข ืื local storage ืืืืฉืชืืฉ ืืืื ืืืืฉืื ืืช ืืขืืืื ืืืืชื ื ืงืืื. ืื ื ืืงืื:
import { useEffect, useState, useCallback } from 'react';
export function useLocalStorage(key, initialValue) {
const oldValue = localStorage.getItem(key);
const [value, setValue] = useState(oldValue ? JSON.parse(oldValue) : initialValue);
useEffect(() => {
localStorage.setItem(key, JSON.stringify(value));
}, [value]);
const clearValue = useCallback(function clearValue() {
localStorage.removeItem(key);
}, [key]);
return [value, setValue, clearValue];
}
ื Hook ืืืืืจ ืฉืืืฉ ืคืื ืงืฆืืืช: ืฉืชืืื ืจืืฉืื ืืช ืืืืช ืืื ืฉ useState ืืืืืจ ืืืฉืืืฉืืช ืืื ืคืื ืงืฆืื ืฉืืืืงืช ืืช ืืขืจื ืื local storage. ืืขืจื ืขืืืจ JSON.stringify ืืคื ื ืืฉืืืจื ืืื ืฉืืคืฉืจ ืืืื ืืฉืืืจ ืืืืข ืืื ืืืคืืก ื ืชืื ืื.
## ืงืื ืืืืืงื: ืงืืืคืื ื ืืช ืขืืจ
ืืฉืืื ืืืืืง ืืช ื Hook ืื ื ืคืืชื ืงืืืฅ ืืืฉ ืืฉื useLocalStorage.test.js ืืืชืืื ืืืืืจ ืงืืืคืื ื ืื ืคืฉืืื ืคื ืืืืช ืฉืชืฉืชืืฉ ื Hook:
import { render } from '@testing-library/react';
import { useLocalStorage } from './useLocalStorage';
import userEvent from '@testing-library/user-event'
function Dummy() {
const [text, setText, clearText] = useLocalStorage('__test_text', 'hello world');
return (
<div>
<p>dummy app: {text}</p>
<button onClick={() => setText('Ouch!')}>set</button>
<button onClick={() => clearText()}>clear</button>
</div>
);
}
ืื ืฉืืฉืื ืฉืืงืืืคืื ื ืื ืชืฉืชืืฉ ืืื ืืืืืืืช ืฉื ื Hook. ืืขืืื ืืืืืชื ืืืืชื ืืืฆืจ ืขืื ืืื ืงืืืคืื ื ืืืช ืืืื, ืืืช ืฉืชืฉืืืจ ืืกืคืจืื, ืืืช ืฉืชืฉืืืจ ืืขืจื ืืื ืืืื.
ืืช ืงืื ืืืืืงื ืื ื ืืืชื ืืืืฉื ืืงืืืฅ ืืืื ืืกื ืืื ืืฉืชืืฉ ืืืคืชืืจืื ืฉื ืืงืืืคืื ื ืื ืืืืืง ืฉืืื ืืชื ืื ืืื ืฉืฆืจืื. ืืืืืื ืฉืื ื ืืคืฉืจ ืืืืืง ืฉืฉืื ืืืื ืืขืจื ืื ื ืืชืืื ื Local Storage:
test('initial value is saved in local storage', () => {
const screen = render(<Dummy />);
const textElement = screen.getByText(/hello world/i);
expect(textElement).toBeInTheDocument();
expect(JSON.parse(localStorage.getItem('__test_text'))).toEqual('hello world');
});
test('changed value is saved in local storage', () => {
const screen = render(<Dummy />);
const setButton = screen.getByText(/set/i);
userEvent.click(setButton);
expect(JSON.parse(localStorage.getItem('__test_text'))).toEqual('Ouch!');
});
test('clear value removes the value from local storage', () => {
const screen = render(<Dummy />);
const clearButton = screen.getByText(/clear/i);
userEvent.click(clearButton);
expect(localStorage.getItem('__test_text')).toBe(null);
});
ืื ืฉืื ืืฉ ืืืจ ืขืจื ื Local Storage ืื ื ืืขื ืืืชื ืื ืฉืชืืฉ ืื ืืชืฆืืื:
test('existing value is read', () => {
localStorage.setItem('__test_text', JSON.stringify('lazy dog'));
const screen = render(<Dummy />);
const textElement = screen.getByText(/lazy dog/i);
expect(textElement).toBeInTheDocument();
});
ืืื ืฉืชืืืืจื ืืืชืจ ืงืืืคืื ื ืืืช ืืืืงื ืคื ืืืืืช (ืืชืืื ืืืืชื ืงืืืฅ ืืืืืงื) ืื ืชืืืื ืืืืืง ืืืชืจ ืืชื ืืืืืืช ืฉืื ืืช ืฉื ื Hook ืฉืืื ืืืืืืช ืืืืืื ืฉืืื ืืขืืื ืืื ืกืืืืืฆืื.1 419
# ืืฉ'ื ืืื
- "ืืื ืืฆื, ืืฆืื ืื ืขืืื"
- "ืืื ืื ืืฉืื ืืฉืืืจืื ืืื ืืืืืงืืช"
- "ืืื ืื ืืฉืืื ืชืืืืื ืขืืืื ืืกืืืจืื"
- "ืืื ืื ืืฆืื ืืช ืื ื QA??"
- "ืื ืื ืืื ืื ืคืืฆ'ืจ"
- "ืื ืื ืืฃ ืืื ืืืืคืืื ืื ืืืืจ ืขื ื Use Case ืืื"
- "ืื ืืฆืืืชื ืืฉืืืจ ื ืืฉืื ืืขืงืื"
- "ืืขื ืืื! ืืคืฉืจ ืืจืืืช?"
ืืชื ืื ืืืืจืื ืืื ืืืืื ืืืืฆืจ ืืื ืื ืืืืจืื ืืื ืืืืื ืืฉืืืืื ืืื. ืืืืฉืคืขื ืฉื ืืืืืจื ืืื ืืจืื ืืืชืจ ืืฉืืขืืชืืช ืืื ืฉืืงืจื ืขื ืืืื ืืกืคืฆืืคื.
1 419
## ืืื Goto Fail ืืื ืื ืื SSL ืฉื ืืคื
ืืื ืืฉืืชื ืฉืืคื ืชืฆื ื ืงืื ืืืจืฉืืื ืืืืช ืื ืื ืจืื ืฉืืืชื ืืช ืืื ืืืืืื ืืืืืืื ืฉื ืืขืฉืืจ - ื Goto Fail. ื 2014 ืืชืืื ืืื ืงืจืืื ืืืืคื ืฉืื ืืืฉืืจื ืืคื ืืคืขื ืืื ืชืขืืืืช SSL, ืืื ืฉืืืคืฉืจ ืืื ืืื ืืืืืฃ ืื ืขืื SSL ืืกืคืืจื ืืฆืื ืืช ืืื ืขืื ืืื ืชืงืฉืืจืช ืืืืืืืช ืจืืืื ืืืืจื.
ืืืื ืืื ืืื ืืชืืืื ืงืืื ืื ืื ืืื ืืืื ืงื ืืจืืืช ืืืชื: ืคืฉืื ืชืืืืฉ ืืืชืจ ืืืืืื ืืื ืืชื ืจืืื ืืช ืืื ืขืื ืฉืืกืื ืชืงืฉืืจืช ืืืืืืืช ืืชื ืืืืข ืฉืขืืื ืขืืื; ืืื ืืืชืจ ืืื ืืื ืืื ืืชืืืื ืื ืืงืื ืฉืืจื ืื ืืื ืืืื ืืงืื ืคืชืื ืืืืคืฅ ืืื ืขื ืื ืืืืืื ืขื ืืืื. ืืืืืืช ืฉืื ื ืืจืืืช ืืขืื ืืื ืืช ืืงืื ืฉืืจื ืืืืืฉื ืืคืื ืืช ืืกืืคืืจ ืืคืืงื ืื ืืื ืืื ื ืืกื ืืืฉืื ืื ืืื ืืื ืืฆืืื ืืืืืช ืืช ืืืขืื ืืงืื.
ืืงืจืืืช ืืงืื ืขื ืืชืงืื ืืคืจืืื ื ืืกืคืื ืขื ืืกืืคืืจ ืฉืืื ืืงืคืืฅ ื:
https://nakedsecurity.sophos.com/2014/02/24/anatomy-of-a-goto-fail-apples-ssl-bug-explained-plus-an-unofficial-patch/
1 419
# ืชืืืืจืช: 5 ืชืงืืืช ืืืืื ืืืชืจ ืืจืืขืืช ื log4j
ืืืืื ืืืืจืื ืื ืืืื ืืืืจืื ืขื ืืคืืจืฆื ืื ืืจืืืช ื log4j, ืืืคืขืืื ืื ื ืืจืืืฉ ืฉืงื ืืฉืืื ืฉืืืืกืืจืื ืืืืช ืืืชื ืคื ืืขืืจ ืืชืืื ืฉืื ืืขืชืื. ืื ืื ื ืชืืืืจืช ื-5 ืืขืืืช ืืืืื ืืืขืืจ ืฉืืืื log4j ื ืืืืช ืืื ืืืื ืืคืืจืง.
## ืกืคืงืืจ
ืกืคืงืืจ ืืื ืฉื ืืืื ืืกืืืจื ืฉื ืืขืืืช ืืืืื ืืืขืืืื ืฉืืฉืชืืฉืื ืืื ืื ืื ืฉื ืงืจื branch prediction, ืฉืื ืืขืฆื ืจืื ืืืขืืืื ืืขืืื. ืืืืืื ืฉื ืกืคืงืืจ ืืื ืฉืชืืื ืืช ืืืช ืืืืื ืืงืื ืืืืขืื ืืืืข ืฉืืื ืื ืฆืจืืื ืืจืืืช ืืืื ืืชื ืืืืช ืฉื ืชืืื ืืืช ืืืจืืช ืขื ืืืืื ื, ืืืืฉืคืขื ืืคืจืงืืืช ืืจืืฉืื ื ืืืชื ืืืคืฉืจืืช ืฉื ืืชืจืื ืฉื ืคืชืืื ืืืื ืืื ืืืคืืคื ืืจืื ืืืขืช ืื ืงืืจื ืืื ืืืืืื ืืืืจืื ืฉืืื.
ืืื ืฉืืชืืื ื 2018, ืื ืืืืจืืช ืืืืืืืช ืืืฆืืื ืืืื ืืืืื ืฉื ืืขืื ืืืชืืืื ืขื ืกืคืงืืจ: ืื ืืืคืืคื ืื ืืืืืื ืืืื ืื ืื ืื ื ืืื ื ืกืคืฆืืคืืื ืืืื ืื, ืืขืจืืืช ืืคืขืื ืืืืืืช ืืื ื ืกืคืฆืืคืืช ื ืื ืชืืื ืืืช ืฉืื ืกืืช ืื ืฆื ืืช ืกืคืงืืจ, ืืืคืืื ืืืขืืืื ืขืฆืื ืืืืขืื ืขื ืื ืื ืื ื ืืื ื ืฉืืืืื ืื ืื ืกืื ืืืืืช ื ืืฆืื ืืจืขื ืฉื ืืชื ืืืืช ืืืืืื ืฉืืื.
ืืืจืืช ืื ืืืฉืงืขื ืืืื ืืช ืฉืืฉ ืื ื ืืืื ืืกืคืงืืจ ืืชืืกืกืืช ืืืื ืขื "ืืชืืื" ืืช ืืชืืงืฃ ืืื ืืืคืฉืจ ืื ืื ืฆื ืืช ืืืืืฉื ืืชืื ืืื ื ืฉืืืืืฉื ืขืฆืื ืืื ืืฉืื ืฉืืืื ืงืฉื ืืชืงื.
ืืงืจืืื ื ืืกืคืช ืขื ืกืคืงืืจ ืฉืืื ืืืงืจ ืืืฃ ืืคืืจืฆื:
https://spectreattack.com
## ืืืจืืืืื
ืืืง ืืืื ืืชืฉืชืืช ืืชืงืฉืืจืช ืืืืืืืืช ืืืื ืืจื ื ืืฉืชืืฉ ืืกืคืจืืช ืงืื ืคืชืื ืืฉื OpenSSH. ืืฉื ืช 2012 ืฉืื ืื ืืงืื ืฉืืืื ืก ืืกืคืจืื ืื ืืจื ืืื ืฉืื ืฉืจืช ืฉืืฉืชืืฉ ืืกืคืจืื ืืื ืคืืืข ืืชืืงืคืื ืืื ืืืืืื ืืงืจืื ืืช ืื ืืืืืจืื ืฉื ืืฉืจืช, ืืืื ืืช ืื ืืคืชืืืช ืืืฆืคื ื ืืคืจืืืื.
ืืชืืงืื ืืกืคืจืืืช OpenSSH ืืื ืขื ืืืืื ืืคืืจืฆื ืืชืจืืฉื ืจืง ื 2014, ืืืืืจ ืฉื ืชืืื ืืืืืจ ืืืชืจ, ืืืฉืคื ืืช ืืขืืื ืืกืื ืืช ืืฉืืืืฉ ืืกืคืจืืืช ืงืื ืคืชืื. ืืฃ ืืื ืื ืืืืข ืืืื ืืจืืื ืื ืืืืจืืื ืืืืจื ืืช ืืคืืจืฆื ืืฉื ืชืืื ืืื 2012 ื 2014 ืืืฉืชืืฉื ืื ืืื ืืจืื ืืืจื ืืฉืชืืฉืื ืืืคืจืืฅ ืชืงืฉืืจืช ืฉื ืืฉืื ืืืืืืืช. ืืืื ืืืืื ืืคืืจืฆื ืืขืจืืืื ืื ืืืืืจ ื 17% ืืกื ืืฉืจืชืื ืืืื ืืจื ื ืืจืืฆื ืืืจืกื ืคืืืขื ืฉื OpenSSH.
ืื ืฉืืคืืื ืืืืช ื Heartbleed ืื ืฉืืืจืืช ืฉืืืื ืชืืงื, ืืื ืื ื ืืจื ืืืขืช ืืื ืืขืืืช ืืืืื ื ืืกืคืืช ืงืืืืืช ืืืืฆืจื ืงืื ืคืชืื ืืืืืืื ืืช ืืชืฉืชืืช ืฉื ืืจืฉืช - ืืื ืื ืืืื ื log4j ืืื ืขืื ืืืืื ืืชืงืืืช ืืกืื ืื.
ืืงืจืืื ื ืืกืคืช ืขื hearbleed ืืคืฉืจ ืืืงืจ ืืืฃ ืืคืืจืฆื:
https://heartbleed.com
## ืืจืืื ื
ืืืื ืื ืกืืจ ืืื ืคืขืื ืคืืืืื ืฉื ืืื ืืืื ืืงืืจื ืืจืคืืจืืืช ืืืืืืืช ืืื ืืืืืื ืืืืืจืืืืช. ืืืืืืกื 2016 ืืื ืงืืื ืืืืขืช ืกืืก ืฉืืืืืื ืืืืืืื ืืืฉืื ืขื ืขืื ืืืื ืืืชื ืืืื ืฉื ืืืืื ืืืืืจืืืืช ืืืื ืง ืืืฆืืจืฃ. ืืืงืื ืืืืืฅ ืขื ืืืื ืง ืื ืกืืจ ืฉืื ืืช ืืืืืขื ืืืืืงื ืืืขืืืช ืืืืืช ืืืืข, ืฉื ืืฆืืืื ืืืืืช ืฉืืืื ืง ืฉืืื ืืืืจืช NSO, ืืื ืื ืกืืจ ืืื ืืืืฅ ืื ืืืืืคืื 6 ืฉืื ืืื ื ืคืจืฅ ืืชืืื ืช ืืจืืืื ืคืจืกืืก ืืืชื ืืืชืงื ืช ืขืืื ืืืืคื ืืืืืืื ืืืื ืืืืขืชื ืฉื ืืคืขืื.
ืฉืืืฉืช ืืขืืืช ืืืืืื ืืงืจืืืืืช ืฉืืืคืฉืจื ืืชืงื ืช ืชืืื ืช ืจืืืื ืืจื ืืืืฆื ืขื ืืื ืง ืืื ืืฉื Trident, ืืืฉืคื ืืช ืืขืืื ืืขืืื ืืืคื ืฉื ืจืืืื ืืจื ืืืคืื ืื.
ืืื NSO ืืชืืื ืช ืคืืกืืก ืืคืื ืืคืืจืกืืืช ืืืื ืืืขืช ืืื ืืขืืืช ืืืืื ืงืจืืืืืช ืืืขืจืืืช ืืคืขืื ืฉื ืืืคืื ืื ืขืื ื ืืฆืืืช ืืฆืื ืืืืกื ืื ืืืฉืืฉืืช ืืืชืงื ืช ืชืืื ืืช ืจืืืื ืืื ืืืืขืช ืืขืื ืืืืคืื ืื.
ืืืชืื ืืืื ืชืืืื ืืืฆืื ืืช ืื ืืคืจืืื ืืขืกืืกืืื ืขื ืืกืืคืืจ:
https://citizenlab.ca/2016/08/million-dollar-dissident-iphone-zero-day-nso-group-uae/
## ืคืจืื ื ื ืืืืืืืจ
ืืชืืืืช ืืืื ืืฉื ื ืืืืงืจืืกืืคื ืืืคื ืขืืืื ืืืืื ืืืืฃ ืืืขืจืืช ืืคืขืื Windows ืืื ืืชืงื ืืื ืืกืจืืืก ืฉื ืงืจื Print Spooler. ืืืื ืืคืฉืจ ืืชืืงืคืื ืืืจืืฅ ืงืื ืืจืืืง ืขื ืื ืืืื ืช Windows ืืืฉืคืืข ืขื ืื ืืืืจืกืืืช ืฉื Windows.
ืืืื ืืื ืืื ืืชืืืื ืืืื ืฉืื ืืกืืื ืืจืืฉืื ืฉื Microsoft ืืชืงื ืืืชื ืื ืืฆืืื, ืืืืงืจื ืืืืื ืืืฉืืื ืื ืฆื ืืืชื ืืืืขืืืช Exploits ื ืืกืคืื ืื ืืืจื ืืชืืงืื, ืืื ืืงื ืืื ืกืืืื ืขื ืฉ Microsoft ืกืืจื ืกืืคืืช ืืช ืืคืืจืฆื.
ืคืจืื ื ื ืืืืืืืจ ืืืืืจ ืื ื ืฉืื ืืขืจืืืช ืืืคืขืื ืฉื ืืืืฉืืื ืฉืื ื ืคืืืขืืช ืืฉืืืืืง ืืื ืืืืคืื ืื, ืืืืืฉืืช ืืืขืจืืช ืืืคืขืื ืื ืืืื ื ืื ืฉื ืืกืืืืจ ืืืชืงืคื.
(ืืืืจื ืฉืคืืจืฆื ืื ืืืชื ืงืืืืช ืืืืื ืืช ืืื ืืืืจืกืืืช, ืืจืง ืืืืื ื ืืื ืฉื ืื ืืื ืืืคืฉืจืช ืืืฉื ืคืชืืื ืืื ืืขืจืืช ืืืื ืืช ืืขืืื ืืคื ื ืฉืืคืืจืฆื ืชืืงื ื, ืืืื ืคืืจืฆืืช ืืืื ืขืื ืืฉ ืฉืื ืื ื ืื ืืืืขืื ืขืืืื).
ืืคืฉืจ ืืืฆืื ืขืื ืืืืข ืขื Print Nightmare ืืชืืืืจ ืฉืืืืงืจืืกืืคื ืืืฆืืื ืืื:
https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-34527
1 419
# ืื ืืืืื ืฉืื ืขืฉืืชื Save
ืืื ืื ืืืืืื ืฉืืคืฉืจ ืืคืืืฉ ืืื ืฉืงืฉืืจืื ืืืืจืื ืืคืฉืืื ืืืืฅ ืืงืื ืื ืืืจืืืืื ืืืืชืจ-
ืืฉืืชื ืืืื ืฉืืชืืงืื ืฉืขืฉืืช ืืงืื ืื ืืืืช ื ืงืื ืื ืืืืคืืง ื ืชืงืข, ืืืจื ืืฆื ืฉืขื ืฉืืชื ืื ืกื ืืืืื ืืื ืื ืืืจื ืืชืืงืื ืืืจืื ืื ืขืืืืื.
ืืฉืืชื ืืืื ืฉืืชื ืืืื ืืช ืืืืจ ืืื ื ืืื, ืื ืฉืืืช ืืืืืฅ Save.
ืืฉืืชื ืืืื ืฉืืืขืจืืช ืื ืขืืืืช ืื ืืฉืชืืฉืช ื
^ ื package.json ืืืืชืงื ื ืืืจืกื ืืืฉื ืืื ืฉื ืืืช ืืชืืืืืช.
ืืฉืืชื ืืืื ืฉืื ืืืื ืืื ืฉืืืคืฉืช ืืช ืืืขืื ืืขืฆื ืืืืช ืืืืืจ ืืฉืจืช ืืื ื ืืื.
ืื ืฉืื ืื ืืจืืื ืืืืืื ืืืื ืืื ืฉืืืฉ ืืงืืืช ืืื ืืคืฉืจ ืืืืืช ืืืชื, ืื ืจืง ืืืืชื ืืืฉื ืขื ืืืืืง ืืช ืืืืจ ืื ืืื ืืืืชืืื. ืืืืืคืืืืืืช ืืืคืืฉ ืขื ืื ืืื ืืืกืื ืืื ืืื ืืืฉืืขืืจ ืฉืืื ืืืื-
ืืฉืืืจืื ืืืืจืื ืงืืจืื, ืงืืื ืื ืืกืืืจ ืืืคืชืื ืืช webpack ืืคื ื ืฉืืืฉืืืื.
ืืฉืืืจืื ืืืืจืื ืงืืจืื, ืงืืื ืื ืืขืฉืืช Save.
ืืฉืืืจืื ืืืืจืื ืงืืจืื, ืงืืื ืื ืืืฉืืืช ืืืจืกืืืช ืฉืืืชืงื ื ืขื npm ls
ืืฉืืืจืื ืืืืจืื ืงืืจืื, ืงืืื ืื ืืืกืชืื ืขื ืืืื ืฉืจืช ืื ื ืขืืื.
ืืื ืฉืจืฉืืืช ืืืืืงืืช ืืืืืจืืช ืฉืืื ืืืืืงืช ืืืชืจ ืืืชืืืื ืืืชืจ ืืืฆืืื ืฉืื ืื ื ื ืชืงืืื ืืื ืืืื ืืื, ืื ืขืืื ืกืืืื ืืืกืื ืืช ืืืชืืจืืจืืช ืืคืขื ืืืื.
Endi mavjud! Telegram Tadqiqoti 2025 โ yilning asosiy insaytlari 
