ToCode
Kanalga Telegramโda oโtish
ืืืคืื ืงืฆืจืื ืืืชืื ืชืื ืืืช ืื ืื ืคืจืง
Ko'proq ko'rsatish1 417
Obunachilar
-224 soatlar
-37 kunlar
-630 kunlar
Postlar arxiv
1 417
ืื ืืงื ืจืง ืฉืชื ืืืืขืืช
ืืืื ืืืืจืื ืขื base44. ืืืจ ืืื ืขืฉื ืืืชื ืืฉืืง ืืื ืืืืจ ืืืจ ืืฉืืง ืืืจ, ืื ืืืจืชื ืืืืื ืื ืื ื ืจืืฆื ืื ืกืืช. ืืืจื ืฉืชื ืืืืขืืช ืงืืืืชื ืืื ื ืืช ืืชืฉืืื:
However, I don't see an integration available for audio transcription in the current platform. This would significantly limit the tool's usefulness.
ืื ื ืืืื ืืช ืืื ืืช. ืืืื ืืืจืื ืืื ืืืืืื ืืงืืช ืืืชื ื Loop ืืงืืช ืืจืืืืช ืขื ืฉืืืืชื ืืืื ืฉืื ืื ื ืืืจื ืืื ืืืฆื. ืืืื ืืช ืืืืช ืืื ืืืืืง ืืกืืคืืจ ืฉื ื AI ืืคืืชืื ืฉืื ื ืืืฉื ืฉืื ืืกืคืืง ืืืืจืื ืขืืื.
ืื ืื ืืื ืืืืื.
ืื ืืคืฉืจ ืืืชืื ืงืื ืืืชืจ ืืืจ.
ืื ืื ืืงืฆืจ ืืื ืื ืืืืคื ืคืจืืืงืื ืฆื ืืืจืื ืืืชืจ ืงืืื ืืืืคืื.
ืืื ืื ืืืื ืคืืชืื ืืืฆืจ ืชืืื ื (ืื ืคืจืืืงื ืฆื) ืืืจืฉ ืืืข ืืชืืื ื, ืืคืืืช ืืื ืื ืงืืื ืืกืืืืช. ืืืจื ืืืืืจื ืืืืชืจ ืงืืืื ืืื ืื ืืืืจื ืื ืฉืืฆืจืืื ืืื ืคืืืช "ืืืชืื ืงืื" ืืื ืื ืฉืืืคืฉืจืช ืื ื ืืฉืื ืืื ืงืื ืืืืืืืช ืฉืื ื ืืืื ืืืืืจืืช ืฉื ื AI. ืืฉืื ืื ื ืื ืืคืืืื ืืงืืื ืืืืื ืื ืืฆืืื ืืืืืื ืืช ืืงืื ืฉื ื AI, ืื ืื ื ืืืืืื ืืงืืช ืืช ืืจืขืืื ืืช ืืืืืจืื ืฉืื ืืืฉืื ืืืชื ืืชืื ืืื ืื ื ืืื ืื ืฉืืชืืืืื ืืืืฉืื ืฉืื ื.
ืืื ืืื ืืืืืง ืืขืงืจืื ืืช ืฉืื ืื ื ืืชืจืืืื ืืชืืื ืืช ืืืืืื ืืืืฉื ืฉืืฆืจืชื. ืืงืืืฆื ืืืื ืืืฆืืช ืืืจื ืืืื ื ืืืคืฉืจ ืืืืื ืขืื ืืืฃ ืืชืืื ืืช ืคื ืืืชืจ.1 417
ืืืื ืืืฉืื ืขื ืืืืืื ื Jotai ืืชืืจ ืืฆืืืขืื ืืชืื ืืืืข ืฉืฉืืืจ ืืืงืื ืืืจ, ืืืืงืื ืืืืจ ืืื ืงืืจืืื store. ืขืืฉืื ืืจืืจ ืฉืื ืจืง ืืืื ืื ื store ื ืืื ืืขืืื ืขื ืืืืืืื ืื ืืืืฅ ืืงืืืคืื ื ืืืช ืืืื ืืืืืงื ืืชืืืื ืืืฆืืจืช store, ืืื ืืคืฉืจ ืืืฆืืจ ืืื ืื, ืืืชืื ืืืืื ืืกืคืจืื ืืืืืื ืฉืืขืจื ืืืงืกืืืื ืืื ืืืืช ืืืืื ืืืืชืจ ืฉื ืืชื.
ืืฉืื ืื ื ืจืืฉืืื ืืช ืืืืืืงื ืืื ืขื ืืืืืืื ืืืฉืชืืฉืื ื store ืืงืื ืืืืืงืืช, ืื ืื ื ืืืืืื ืื ืืืืฉ ืืืืืงื ืืืจืืืช ืืื ืืืืืง ืืืชื ืืืืืืช ืืืืืื ืฉืืื ืชืงืื.
1 417
ืืื ื ืืกืฃ ืขื Jotai
ืืชืืชื ืืขืืจ ืขื jotai ืืื ื ืืืื ืฉืืืืชื ืืื ืืื ืื ืืื ืกืคืจืืืช ื ืืืื ืืกืืืื ืืืืขืืคืช ืขืืื. ืืืคื ืฉื ื ืืืฆื ืืืืื ืื ื ืืืจ ืืจืื ืืืชืจ ืืืื ืืืชื ืืืืืืฅ ืขืืื ืืคืจืืืงืืื ืืืฉืื. ืืืื ื ืจืื ืืื.
ืืื ืืกืชืืืชื ืขื Jotai
ืืืืืื ืืคืืกื ืืงืืื ืฉืืชืืชื ืขื Jotai ืืฆืจืชื ืืขืจื ืฉื ืืื ืื, ืืืื ืืืืืื ืืืฆืจืชื ืืืื ืฉืืืืืง ืืช ืืขืจื ืืืงืกืืืื. ืื ื ืขืืืื ืืืฉื ืฉืื ืจืขืืื ืืื ืืื ืืื ืืงืื ืืืื ืขื ืชืืกืคืช ืชืืืื ืืืืืคืกืงืจืืคื:
import { Atom, atom, PrimitiveAtom } from "jotai";
export const countersAtom = atom<Array<PrimitiveAtom<number>>>([]);
export const maxValueAtom = atom((get) =>
get(countersAtom).reduce((acc, val) => (acc > get(val) ? acc : get(val)), 0)
);
export type CounterAtomType = typeof countersAtom extends Atom<Array<infer T>> ? T : never;
ืืื ืื ื ืืกืืชื ืืขืืื ืืช ืืืืื ืืชืื ืืงืืืคืื ื ืืืช ืืืฉื:
'use client';
import { useAtom, atom } from "jotai";
import { maxValueAtom, countersAtom } from "@/lib/counters";
import Counter from './counter';
export default function App() {
const [counters, setCounters] = useAtom(countersAtom);
const [maxValue, _] = useAtom(maxValueAtom);
const createCounter = () => {
setCounters((counters) => [...counters, atom(0)]);
};
return (
<div className="App">
<h1>Hello Jotai</h1>
<p>Max value = {maxValue}</p>
<button onClick={createCounter}>Create Counter</button>
{counters.map((counter, idx) => (
<Counter myAtom={counter} />
))}
</div>
);
}
ืืืื ื ืชืงืขืชื ืขื ืืคืื ืงืฆืื createCounter ืืชืื ืืงืืืคืื ื ืื ืืืืืจืช ืืืืื ืืงืืืฅ ื ืคืจื.
ืืื ืื ื ืืฉืชืืฉ ื Jotai ืืืื
ืืืื ืฉื ื ืื ืื ืฉืืื ืฆืจืื ืื ืืืืื ืงืฆืช ืคืื ืงืฆืืืช ืืืงืื ืืืงืื ืืื ืืฉืคืจ ืืช ืืงืื. ืื ื ืืืื ืืช ืืืืืืงื ืืชืื ืืงืืืฅ ืื ืืืืืืื ืืืืืจื ืืืงืื:
export const createCounterAtom = atom(null,
(_get, set, _update) => set(countersAtom, counters => [...counters, atom(0)]));
export const deleteCounterAtom = atom(null,
(_get, set, toDelete: PrimitiveAtom<number>) => set(countersAtom, counters => counters.filter(c => c !== toDelete)))
ืืขืฆื ืื ืื ื ืฆืจืืืื ืืืฉืื ืขื ืืขืืืื ืื ืืชืืจ ืืืืืื ื ืืืจืื ืืืชืืื ืืืื. ืืชืืื ืืชืื ืืืื createCounterAtom ืืืฆืจืช ืืื ื ืืืฉ ืืชืื ืืืขืจื countersAtom. ืืชืืื ืืชืื ืืืืื deleteCounterAtom ืืืืงืช ืืื ื. ืืชืื ืืงืืืคืื ื ืื ืื ื ืจืื ืืื:
'use client';
import { useAtomValue, useSetAtom } from "jotai";
import { maxValueAtom, countersAtom, createCounterAtom } from "@/lib/counters";
import Counter from './counter';
export default function App() {
const counters = useAtomValue(countersAtom);
const maxValue = useAtomValue(maxValueAtom);
const createCounter = useSetAtom(createCounterAtom)
return (
<div className="App">
<h1>Hello Jotai</h1>
<p>Max value = {maxValue}</p>
<button onClick={createCounter}>Create Counter</button>
{counters.map((counter, idx) => (
<Counter myAtom={counter} key={idx} />
))}
</div>
);
}
ืืขืืฉืื ืืื ืื ื ืืืื ืืืืืงื ืืชืื ืืงืืืคืื ื ืืืช ืืืจืื ืืืชืจ ืงื ืืงืจืื ืืืชืืืง ืืืชื.
ืืืืงืช ืืืืืื ืืื ืจืืืงื
ืืฉืืง ื ืืกืฃ ืฉืื ืืืจืชื ืืฉืืชืืชื ืืช ืืคืืกื ืืงืืื ืืื ืืืคืฉืจืืช ืืขืืื ืขื ืืืืืืื ืืืืืืง ืืช ืืืืืืงื ืื ืืืืฅ ืืงืืืคืื ื ืืืช ืจืืืงื. ื ืชืืื ื ืืงืื ืืืืืงื ืืื:
import {test} from 'node:test';
import assert from 'node:assert';
import { maxValueAtom, countersAtom, createCounterAtom } from "@/lib/counters";
import { createStore } from 'jotai'
test('demo test', () => {
const store = createStore()
store.set(createCounterAtom, null);
store.set(createCounterAtom, null);
store.set(createCounterAtom, null);
const countersAtomValue = store.get(countersAtom);
store.set(countersAtomValue[0], 4);
store.set(countersAtomValue[1], 2);
store.set(countersAtomValue[2], 1);
const maxValue = store.get(maxValueAtom);
assert(maxValue === 4);
})1 417
ืืจืืขื ืืืจืื ืฉืืืืชื ืืคืืืืจืืื (ืืืื ืฉืืืืชื ืคืืืช)
ืคืืืืจืืื ืืื ืกืคืจืืืช ืืชืืืช ืืืืงืืช ืืงืฆื ืืงืฆื ืืืคืืืงืฆืืืช ืืื ืฉืืชืืืื ืืคืืืชืื, TypeScript / JavaScript, ื'ืืืื ืืืืื ื. ืืืืืช ืืื ืคืืชืจืื ืืช ืืจืขืืื ืืช ืืืืืืืื ืืขืื ืืื ืจืขืืื ืืช ืืืืื ืฉืื ืืกืคื ืืืงืืืืช ืืืจืื ืืขืืืื ืขื ืคืืืืจืืื ืืจืืืฉื ื ืืื ื ืืืจืืข ืืจืืฉืื. ืื ื 4 ืืืจืื ืฉืื ื ืืืื ืืืืชื ืืกืคืจืื ืืืื ืฉืคืืืช. ื ืชืืื ืืืืืื:
1. ืชืืขืื - ืื ื ืืืืข ืื ืืืืื ืื ืืืง ืืืกืคืจืื ืืื ืืืืช ืฉืืฉืืชืืืืื ืืขืืื ืขื ืกืคืจืื ืืืืืื ืขืืืื ืชืืขืื ืืืฉืงืขืื ืฉืืืืืื ืื ืืกืืจ ืืคืืจื, ืื ืืืืื ืืฉืฆืจืื ืืื ืืืจืืืื ื Best Practice ืืชื ืืืจ ืืจืืืฉ ืืืืืื ืืืืืช.
2. ืืชืืืช ืืืืงืืช ืืืืฆืขืืช ืืงืืื - ืืชืื ืฉืืจืช ืืคืงืืื ืืชืืชื
npx playwright test --debug ืื ืื ืกืชื ืืืฆื ืืืืืื ืฉื ืืืืืงืืช, ืฉื ืืื ืื ืืคืืคื ืฉืืจืื ืืช ืืขืืื ืืืคืชืืจ "ืืงืืื" ืฉืคืฉืื ืืชืจืื ืืช ืืคืขืืืืช ืฉืื ืืงืื ืืืืงื. ื ืืื ืืื ืื ืืืข ืืืชืื ืืช ื expect ืื ืืื ืื ืืืข ืืื ืืฆืคืืช, ืืื ืื ืืฉืืจ ืขืื ืืืฉ ืืกืืจ. ืื ืืืืงื ืืืืืื ืฉืืชืืชื ืืืชืจ ืืืงืื ืืืืฆืขืืช ืืืงืืื ืฉืืื:
test('sign up to receive daily posts', async ({page}) => {
await page.goto('https://www.tocode.co.il/blog');
await page.getByRole('textbox', { name: 'you@wherever.you.are' }).click();
await page.getByRole('textbox', { name: 'you@wherever.you.are' }).fill('ynon@tocode.co.il');
await page.getByRole('button', { name: 'ืฉืืื ืื ืืืืื' }).click();
await expect(page.getByText('ื ืฉืื ืืืื ืืืื ืขื ืงืืฉืืจ ืืืืฉืืจ ืืืจืฉืื. ืืฉ ืืคืชืื ืืช ืืืืื ืืืืืืฅ ืขื ืืืคืชืืจ ืืืืฉืืจ')).toBeVisible();
})
3. ืชืืืื ืืืื ืืื ืืืคืืคื ืื ืืืืื ืืืกื - ืืืืฆืขืืช ืืืืจื ืืงืืืฅ ืงืื ืคืืืืจืฆืื ืืฆืืืชื ืืืื ืืืจ ืืืืืง ืขื ืืืชืจ ืื ืคืืืช ืืคืืคื ืื ืืื ืืืืืจ ืืืืืืืจืื ืืืืื ืืกื ืฉืื ืื ืืืืฆืขืืช ืคืืฆ'ืจ Device Mode ืฉื ืืืคืืคื ืื. ืื ื ืืืืื ืืงืื ืคืืืืจืฆืื:
import { defineConfig, devices } from '@playwright/test'; // import devices
export default defineConfig({
projects: [
{
name: 'chromium',
use: {
...devices['Desktop Chrome'],
},
},
{
name: 'Mobile Safari',
use: {
...devices['iPhone 13'],
},
},
],
});
4. ืืขืืคื ืืืชืื ื Role - ืืืจืืช ืฉืืชืืจ ืืืชื ืืืืงื ืื ืืืื ืืขืืืฃ, ืืื ืืืขืืคื ืฉื ืคืืืืจืืื ืืืืืื Locators ืฉืืฉืชืืฉืื ื Aria Role ืขืืืจืช ืืืืืืฉ ืืช ื Role ืฉื ืื ืืืจ ืืืชืจ ืืืจืืืช ืืืจ ืืฉืืืืจืืช ื Aria ืื ื ืืื ืืช, ืืื ืืคืืื ืืคื ื ืฉืกืืืื ื ืืืชืื ืืช ืืืืืงืืช. ืืื ืืฉ ืืื ืื ืชืืกืฃ ืืืืืงืช ืืขืืืช ื ืืืฉืืช ืืืื ืืฉืืื ืืคื ืื ืฉืืื ืื ืืืืืื ืืื:
import { test, expect } from '@playwright/test';
import AxeBuilder from '@axe-core/playwright'; // 1
test.describe('homepage', () => { // 2
test('should not have any automatically detectable accessibility issues', async ({ page }) => {
await page.goto('https://your-site.com/'); // 3
const accessibilityScanResults = await new AxeBuilder({ page }).analyze(); // 4
expect(accessibilityScanResults.violations).toEqual([]); // 5
});
});
5. ืืื ืคืืืช? ืื ื ืืฆืืชื ืืช ืืชืื ื expect ืืืืื ืืืืืื ืืฉืืืง ืืืืืืงืืช ืกืื ืืจืื ืืืช ืืืืจืืช ืืกืื ืืจืื ืืืช ืืืืืื ืฉืชื ืืืืืงืืช ืืืื ืืื ื ืืืืช:
await expect(page).toHaveURL('...');
await expect(page.url()).toBe('...');
ืืจืืฉืื ื toHaveURL ืืื ืืืืงื ืืกืื ืืจืื ืืช ืฉืืืื ืขื ืฉื URL ืืฉืชื ื ืืขืงืืืช ืืืืฆื ืื ืืคื ืื, ืืื ืืืืืงื ืืฉื ืื ืืื ืืืืงื ืืืืืืช ืื page.url ืืื ืคืื ืงืฆืื ืกืื ืืจืื ืืช ื toBe ืืื ืืืืงื ืกืื ืืจืื ืืช. ื await ืืฉืืจื ืืฉื ืืื ืื ืขืืฉื ืืืื ืืืืื ืฉืืื ืฉื ืฉืื Promise. ืืคืืขื ืืื ื ืื ืืืจืฉ ืืืกืชืื ืขื ืืืืคืืกืื ืื ืคืขื ืฉืืืชืืื ืืืืงื ืืื ืืืืื ืื ืคืื ืงืฆืืืช ืืืืืงื ืืื ืกืื ืืจืื ืืช ืื ืืกืื ืืจืื ืืช.
ืกื ืืื ืืืื ืืืืชื ืืช ืคืืืืจืืื ืืื ืืชื ืฆืจืืืื ืกืคืจืืืช ืืืืงืืช End To End ืืคืจืืืงื ืืื ืกืคืง ืฉืืืืืจ ืืืืืจื ืืืื ืืืืืื.1 417
ืืืื ืืืืชื: ืืงืืจืืืื ืืื JavaScript
ืื ื ืืจืืง HTML ื ืืื ืฉืืกืชืืจ ืฉื ืชืื ืืืจ ืชืงืืคื ืืืืืฉืื ืืืืืชื ืขืืื - ืื ืฆืจืื ืืืชืจ JavaScript (ืื ืืคืืื ืื ืืืจ ืืฉ ืืื JavaScript ืื ืฆืจืื ืืฉืืืจ ืืฉืชื ื ืกืืืื) ืจืง ืืฉืืื ืื ืื ืืงืืจืืืื ืขื ืืืจืื ืฉื ืคืชืืื ืื ืกืืจืื. ืื ืื ืฉืฆืจืื ืื ืืืื ื details ืฉื HTML ืืื ื ืจืื ืืื:
<details >
<summary>Toggle me</summary>
<div >
<p>Look there's no JavaScript involved ... yay</p>
</div>
</details>
ืืืงืืืคื:
<iframe height="300" style="width: 100%;" scrolling="no" title="Untitled" src="https://codepen.io/ynonp/embed/wBvPpjy?default-tab=html%2Cresult" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
See the Pen <a href="https://codepen.io/ynonp/pen/wBvPpjy">
Untitled</a> by Ynon Perek (<a href="https://codepen.io/ynonp">@ynonp</a>)
on <a href="https://codepen.io">CodePen</a>.
</iframe>
ืืื ืืชื ืฆืจืืืื ืืขืฆื ืืืชื ืืคืฉืจ ืืืฉืชืืฉ ื :open ื CSS ืืื ืืชืคืืก ืืช ืืืฆื ืืคืชืื (ืื ืขืืื ืืกืคืืจื ืืื ืชืืื) ืืืืืื:
details:open > summary {
background-color: pink;
}
:is(select, input):open {
background-color: pink;
}
ืื ื open ืืชืื ืกืืืจืืื ืืจืืืขืื ืฉืื ืขืืื ืื ืืกืคืืจื:
details summary {
background: pink;
}
details {
background: lightgreen;
}
details[open] summary {
background: red;
}
ืืื ืืฉื ืืืจ - ืื ื ืคืืชื ืืืื ืืช ืืจืืฉืื ืืงืืืฆืช ืคืืชืื ืืคืจืืืงืืื ืืืื ืฉืชืฆื ืืืจื ืืืื ื. ืื ืืกืืื ืืขืืื ืฉื ืืชื ืืืฉืชืชืคืื ืืช ืืืกืืจืช, ืืืืข ืืืืืืืืฆืื ืืื ืืช ืคืจืืืงื ืืงืฆื ืืงืฆื. ืื ืืขื ืืื ืืชืื ืฉืืื ืืืขืืฃ ืืื ืืืฃ ืืคืจืืืงื ืืืงืืืข ืฉื ืคืืืฉืช ืืืืจืืช.1 417
ืืคืืชืจืื ืื ืืื
ืืคืืชืจืื ืื ืืื ืืื ืื ืชืืื ืืงื ืืืืชืจ. ืจืื ืืืื ืื ืืคืื, ืืคืืชืจืื ืื ืืื ืืื ืืงืฉื ืืืืชืจ ืืืืฉืื ืื ืืื ืืืจืฉ ืืจืืื ืืืืฉ ืฉื ืืงืื.
ืืคืืชืจืื ืื ืืื ืืื ืื ืชืืื ืืืืืจ ืืืืชืจ ืืืืฆืืข. ืจืื ืืืื ืื ืืคืื, ืืคืืชืจืื ืื ืืื ืืืงื ืืื ืืจืื ืืื ืื ืืื ืืืื ืื ืืื ืืืืื. ืื ืืืืช ืืืืข ืืื ืืขืฉืืช ืืช ืื ื ืืื ืืืืช ืขืืฉื ืืช ืื ื ืืื ืืคืขื ืืจืืฉืื ื.
ืืคืืชืจืื ืื ืืื ืืืจืฉ ืืืืืืช ืืืขืืช, ืืงืืช ืฆืขื ืืืืจื ืืืืฆืื ืืจื ืืคื ืืฉื. ืจืื ืืืื ืืฉืืฉ ืื ืืขืจืืช ืฉืืืจ ื ืื ืชื ืืฆืืจื ืื ื ืืื ื ืืืื ืื ืืืื ืงืฉื ืืขืืืจ ืืคืืชืจืื ืื ืืื, ืงืฉื ืืืขื ืืื ืืื ืืช ืืช ืื ืืื ืื ืื ืืืชืืื.
ืืคืืชืจืื ืื ืืื ืืื ืืคืืชืจืื ืื ืืื. ืืื ื ืืื ืื ืืืจื ืืืฉืื ืฉืื ืืืื ืืืชืจ ืงื ืืืชืงืื. ืืคืืชืจืื ืื ืืื ืืืงื ืืืชื ืืืืจื ืืื ืฉืชืืื ืืืชืงืื ืืืจ ืืืชืจ. ืืืคืืชืจืื ืื ืืื ืืื ืืืชื ื ืื ืข. ืืืืฉืื ืื ืกืืข ืขื ืืืืื ืขืืจ ืื ืืืืช ืืืกืื ืื ืืช ืืฆืืจื ืืืืื ืืจืื ืขื ืืืคื ืืื. ืืื ืืจืืจ ืื ืฆืจืื ืืขืฉืืช ืื ืื ืืจืืจ ืฉืืื ืฉื ืืื ืื ืจืง ืืืื ืืืชืจ ืงืฉื.
ืืฉ ืจืง ืืขืื ืืืช.
ืืชื ืืฃ ืคืขื ืื ืืืืข ืฉืืืขืช ืืคืืชืจืื ืื ืืื, ืืื ืจืื ืฉืืขืืื ืืืืืชื ืื ืืคืฉืจ ืืืืืข ืืืื. ืคืืชืจืื ืืช ืื ื ืืื ืื? ืืืื ืื ื ืืืื ืืงืืืืืืจ, ืื ืื ืืขื ืฉืื ื ืืืชืื ืชืื - ืืืืืช ืื ืืจืืฆืื ืืืืืื ืืื ืงืื ืืกืืื ืืจืืข. ืืคืืชืจืื ืื ืืื ืืื ืืืื ืืื ืจืื ืื ืืื ืฉืืคืฉืจ ืืืืฉืื. ืืื ืชืืื ืื ืฉืืคืฉืจ ืืขืฉืืช ืื ืืืืืช ืขืื ืืขืืืช ืืงืื ืืืฉืคืจ, ืืื ืืื ืืื ืคืขื.
1 417
ืื ืจืืืงื ื ืืื ืืกืืื ืืื
ืจืืืงื ืชืืื ืืื ืืกืืื ืืื ืกืื ืืกืืืื ืืฉืชื ื. ืคืขื ืืื ืงืฉื ืืืืื ืืช ืืจืขืืื ืฉื ืจืืืงื ืืื ื API ืฉืื ืืื ืืืกืืช ืงืื, ืืื ืืืฉืืืื ืืื ืืืืจ. ืืคืชืื ืจืืืงื ืฉืืืจืชื ืืคื ื 8 ืฉื ืื ืืืขื ืืขื ืคื ืื ืขืืฉื ืื ืคืงืืื ืืกืคืจืื. ืืืื ืืกืืคืืจ ืงืฆืช ืืืชืจ ืืกืืื, ืืืฉืืื ืืืืืื ืืช ืื ืื ื ืจืง ืืืจืืง ืคื ืจืฉืืื ืฉื Hooks ืืืชืืขืื. ื ืกื ืืกืคืืจ ืืื ืืชื ืืืืจืื ืื ืืืื ืืฉืชืืฉืชื:
1. useId
2. useDeferredValue
3. useDebugValue
4. useInsertionEffect
5. useImperativeHandle
6. useOptimistic
7. useSyncExternalStore
8. useActionState
9. useFormStatus
ืืืขืื ืขื ืขืืืก ื Hooks ืืื ืฉืื Hook ื ืืขื ืืคืชืืจ ืืขืื ืืืื ืกืคืฆืืคืืช. ืืืงื ืืืืช ืคืฉืืืื ืืื
useDebugValue ืืื ืื ืืื ืืืจืฉืืื ืืืืช ืืชืืจ "ืืขืงืฃ" ืื ืืขืื ืฉืื ืืคืฉืจ ืืคืชืืจ ืขื ืืืืื ืืจืืืืื ืฉื ืจืืืงื. ืืขืืื ืืืฉืื ืื ื-9 ืืืื ืืื ืจืื ืื ืืืง ืื Hooks ืืืืชืจ ืฉืืจืชืืื ืืื ืื ืืืื ืืชืืจ ืกืคืจืืืช ืืืฆืื ืืืช ืขืืืจ ืืืชื ืืงืจืื ืฉืฆืจืืืื ืืืชื.1 417
ืื ืขืืฉืื ืืืงืื URL Params ืืืคืืืงืฆืืืช ืฆื ืืงืื ืขื Next.js
ืืืื ืืื ื Next ืขืืจืจ ืืืื ืกืืขืจ:
https://github.com/vercel/next.js/discussions/64660
ืืงืฆืจื ืืฉืื ื ืืื ื ืืคืืืงืฆืืืช ืฆื-ืืงืื ืืืื ืขื
output: 'export' ื next.js ืื ืืคืฉืจ ืืืฉืชืืฉ ืื ืชืืืื ืืื ืืืื, ืืืืืจ ื ืชืื ืืื ืื ืืขืืื:
/blog/[slug]
ืืืกืืจ ืืื ืฉืืฉื ืงืกื ืจืืื ืืื ืืืจ ืืื ืื ืืืืข ืืืื ืงืืืฅ HTML ืืื ืืช, ืื ืฆืจืื ืืืืืจ ืฉืื ืื ืื ืื ืื ืืชืื ืฉื ื ืงืกื ืืืคืืืงืฆืืืช ืฆื ืืงืื ืื ืื ืขื ืื ืฉืืื ืืจืืฅ ืืช ืงืืฆื ืืงืืืคืื ื ืืืช ืืคื ืืขืจืืช ืืงืืฆืื ืืืืืฆืจ ืืขืจืืช ืงืืฆื HTML ืืงืืืื ืืงืืฆื ื JavaScript, ืืืืืจ ืืจื ืืจ ืืช ืื ืงืืฆื ื page.tsx ืืฉืืืจ ืืช ืืชืืฆืืืช ืืชืืจ HTML-ืื.
ืืื ื ืฉืื ืืฆื ืืช ืื ืืคืืชืจืื ืืช ืืืชืืืืืื ืืืช ืื ืืชืงืืืช ืฉืืงืจืื ืืืืจืื ื Vercel ืืคืชืจื ืืช ืื (ืื ืืืืืื ืคืืชืจืื ืืืืืจ ืืื-ืืื ื), ืืื ืืืจ ืืื ืชืืื ืืคืฉืจ ืืื ืืช ืคืืชืจืื ืืงืืื ืืื ืคืฉืื - ืืืงืื ืืืฉืชืืฉ ื Route Params ื ืฉืชืืฉ ื Search Params, ืืืืืจ ืื ืชืื ืืืื:
/blog/post?slug=hello-world
ืืงืื next ืงืฆืช ื ืืื ืืง ืืืฉืืื ืืืฉืช ื Search Params ืื ื ืฆืจืื ืืขืืืฃ ืืช ืืงืืืคืื ื ืื ื Suspense ืืื ืืืืื ืช ืงืื ื page.tsx ืื ื ืืืชื:
'use client'
import ShowPost from './show-post';
import { Suspense } from 'react';
export default function BlogPost() {
return (
<div>
<Suspense fallback={<p>Loading post</p>}>
<ShowPost />
</Suspense>
</div>
)
}
ืื show-post.tsx ืืฉ ืื:
'use client'
import Link from 'next/link';
import { getPost } from '@/lib/blog';
import { useSearchParams, notFound } from 'next/navigation';
export default function BlogPost() {
const slug = useSearchParams().get('slug')!;
const post = getPost(slug);
if (!post) {
return <p>Not flund. slug = {slug}</p>
}
return (
<div>
<h1>{post.title}</h1>
<p><Link href="/blog">Back to blog</Link></p>
<p>{post.fulltext}</p>
</div>
)
}
ืืืื ืื ืฉืืชื ืืืืขืื ืืื ืืงืื ืคืืกื ืืคื slug ืืงืื ืืขืืื ืืืฉ ืืื ืืืื ืืชืืจ ืืคืืืงืฆืืืช ืขืืื ืืืื.1 417
ืื ืื ืื ื, ืื ื AI ืืชื
ืืื ืืืจ ืืื. ืืจืืข ืฉืืงืืชื ืงืื ื AI ืืฉืืชื ืืืชื ืืจืืคื ืืื ืืืคื ืืงืื ืฉืื. ืืฉื ืฉืื ืืชืื ืขื ืืืืขืช ืืงืืืื ืื ืฉื Gemini. ืืืืจืืืช ืืื ืฉืื ืืืืื ืฉื AI ืื ืขืืฉื ืฉืืืืืช ืืืงืจืื ืืช ืืืืจืื ืฉืืื ืืืชื, ืืื ืื ื ืื ืืืื ืืฉืื ืืืืจืืืช ืืื ืฉืื ืืืืื ืืช ืื ืืืืคืขืื ืืฉืืื ืืืงืืจืชืืช ืืืคื ื AI.
ืืืืืื ื ืืืืช ื AI ืื ืืืืฉ ืืืื ืืขืืจ ื Stack Overflow ืื ืืืืืจ ืกืงืจืืคืืื ืฉืืฆืืชื ืืจืฉืช. ืจืง ืืืื ืฉ AI ืืชื ืืช ืื ืื ืืืคื ืืช ืื ืื ืืื ืื ืจืฆืื. ืืื ืื ื ืืกืืื ืืชืื ืฉืืฉ ืคื ืืขืื ืื AI ืืืฆืจ ืืื ืกืืฃ ืงืื ืฉื ืจืื ืืืืื ื ืืืืื ืืื. ืืืืืง ืืฉืืื ืื ืืฉืืืื ืืื ืืืชืจ ืืื ืฉืืชื ืืฉืืืื ื AI.
ืื ืืชื ืื ืืกืืืืื ืืืืื ืืช ืืงืื ืฉื ื AI ืขืืืฃ ืฉืชืืชืื ืืขืฆืืื. ืืื ืืื ืืื ืืื ืืงืจืื ืืช ืืงืื ืฉื ื AI, ืืื ืชืืฆืื ืืื ืืชืงื ืืช ืืืืืื ืฉืื?
1 417
ืืืค ืคืืืชืื: ืืืจื ืืืืืืื ืื
ืืงืื ืืื ืขืืื ืืคื ืืคืืืชืื:
import re
if re.search('a', 'hello'):
print("a found in hello")
else:
print("a not found in hello")
ืืื ืื ืื ืื ืื:
if 'hello'.find('a'):
print("found a")
else:
print("a not found")
ืืืจืืช ืฉืคืืืชืื ืื ืืืื ืืืืืจ ืืืคืืกืื ืืืืคื ืืืืืืื, ืืื ืื ืืืข ืืืืืืื ืื ืืืืฉื ืฉื ืคืืืชืื ืืคืืื, ืืื ืืืืืื:
1. ืื ืืฉ ืคืื ืงืฆืืืช __bool__ ืืืืจ, ืคืืืชืื ืืคืขืื ืืืชื ืืื ืืืืืช ืื ืืขืจื ืืืืืืื ื.
2. ืื ืืื __bool__ ืืื ืืฉ __len__, ืคืืืชืื ืืคืขืื ืืช __len__ ืืืืืืง ืื ืืชืืฆืื ืืื ื ืืคืก.
3. ืื ืืื __bool__ ืืืื __len__ ืืืืืจืื True.
ืื ื ืืื ื ืืกืืืื:
>>> None.__bool__()
False
>>> (-1).__bool__()
True
ืื ืขื ืืืืืช ืืืืืื ืืจืืืืืจื?
>>> re.search('a', 'hallo')
<re.Match object; span=(1, 2), match='a'>
>>> re.search('a', 'hallo').__bool__()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 're.Match' object has no attribute '__bool__'. Did you mean: '__copy__'?
>>> re.search('a', 'hallo').__len__()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 're.Match' object has no attribute '__len__'. Did you mean: '__le__'?
ืืืืืื ืจืืืืืจื ืืื __bool__ ืืืื __len__ ืืื ืืื ืืืืืจ True. ืืื ื ื ืืกืื ืขื ืงืืืกืื ืฉืื:
class Foo:
def __bool__(self):
return False
class Bar:
pass
f = Foo()
if f:
print("Foo 1")
else:
print("Foo 2")
b = Bar()
if b:
print("Bar 1")
else:
print("Bar 2")
ืืคืื ืืฆืคืื Foo 2 ื Bar 1.1 417
ืืืืจืืช ืืืืืืช ืืื ืืจืืืช ืืืืืจ
ืืช ืืืืจืืช ืืืืืืืช ืจืืืื. ืืฉ ืงืืืง ืืฉืืืืืื ืฉืืื ืืืืจื, ืืืฉืืืฉืื ืฉืืื ืืฉืื ืืืืจื ืืืืื ืืฆืคืฆืฃ. ืืืืจืืช ืืืืืืืช ืื ืจืง ืืืื ืืช ืขืืื ืืชืืื ื ืื ืื ืืืื ื ืืืืืช ืืืื ืื ืกืืขื. ืืืชื ืืืจ ืืืืืืืืื ืฉืืฆืคืฆืฃ ืื ืคืขื ืฉืืชื ืงืฆืช ืืืฆื ืืื ืชืื ืื ืืชืงืจื ืืืืื ืฉืืคื ืื.
ืืจืืืช ืืืืืจ ืขืืืืืช ืืืจืช. ืื ืืืื ืฉื ืืฉื ืฆืืจื ืืื ืจืื ืืืื ืืื ืื ื ืืื ืืจืงืฆืื ืืืชื.
ืื ืืืืจืืช ืืืืืืช ืืื ืืจืืืช ืืืืืจ ืืืจืฉืืช ืืืื ืื ืืืืืืช ืฉื ืืืื. ืื ืื ื ืืงืืืื ืฉืืฉืชืืื ืชืืื ื ืื ืืขืืื, ืืื ืืื ืืจื ืืืืืช ืืืืืื ืืจืืฉ. ืืฃ ืืื ืื ืืขืฉื ืชืืื ื ืจืง ืืฉืืื ืืจืืืช ืฉืืืืจืช ืืืืืืืช ืืืืช ืืืืืจืช ืืื ืฉืฆืจืื.
ืืงืื ืืืฆื ืฉืื ื ืืืฉ ืื ื ืืช ืืคืจืืืืืืื ืืืืืง ืืช ืื ืื ืื ื ืืืื ื ืฉืื ื ืืคื ื ืจืืข ืืืืช. ืืฉืืืืืื ืืฆืืขืื Push Protection ืฉืืืื ืืืืืืืืช ืืืืกืื ืืฉืื ืื ื ืื ืกืื ืืืืืฃ ืกืืกืืืืช ืื ืกืืืืช ืืจืืคื, ืื ืื ื ืืืืืื ืืืืืง ืืช ืื ืขื ืกืื ืืืืืฃ ืจืง ืืฉืืื ืืจืืืช ืฉืืื ืืืกื ืืืชื ื. ืืฉืื ืื ื ืืงืืืื ืืขืจืืช ืืืืื ืืืกืืก ืื ืชืื ืื, ืืคืฉืจ ืืจืฆืื ืืงืืช ืืื ืืื ืกืืช ืืฉืืืจ ืืื ืืจืืืช ืฉืืืืืื ืืืืช ืืืื ืฉื ืืฉื ืฆืืจื. ืื ืืฉ ืื ืืื ืฉืจืชืื ื Load Balancer, ืื ื ืืืื (ืืืคืืื ืืืื) ืคืขื ืืืื ืืื ืืืจืืฅ ืขืืืก ืืืื ืขื ืืื ืืฉืจืชืื ืืื ืืจืืืช ืฉื Load Balancer ืืชืคืงื ืืืคืกืืง ืืืื ืืก ืชื ืืขื ืืฉืจืช ืืขืกืืง.
ืจืง ืืืื ืฉืื ืื ื ืจืืืื ืืฉืื ืื ืืืื ืื ืืืืจ ืฉืืื ืขืืื (ืืจืง ืืืื ืฉืื ืื ื ืื ืจืืืื ืืฉืื ืื ืืืืจ ืฉืืื ืืืืื). ืื ืื ืื ืื ืืื ื ืืืจืฉ ืชืืืืงื ืืืืืงื ืฉืืืคืช, ืืขืืืฃ ืืฉืืขื ืืื ืื ืจืืืขืื ืืื ืืืฆื ืืืจืื.
Endi mavjud! Telegram Tadqiqoti 2025 โ yilning asosiy insaytlari 
