ToCode
Kanalga Telegramโda oโtish
ืืืคืื ืงืฆืจืื ืืืชืื ืชืื ืืืช ืื ืื ืคืจืง
Ko'proq ko'rsatish1 418
Obunachilar
+124 soatlar
-27 kunlar
-530 kunlar
Postlar arxiv
1 418
ืื ื ืืืื ืืืืืืช ืฉืื ื ืขืืืื ืื ืจืืื ืืื ืคืงืืืช
use ืชืืคืื ืืืฉืื ืฉืื ืฉืื ืืจืฆื ืืืฉืชืืฉ ืื ืืื ืขืืืคื ืืกืืืจืช ืฉื ืกืคืจืื ืืื ืืืื ืืืืื. ืืฉืืื ืืืฉืืง ืืืืื ืื ืืืฉืืืช ืืื ืืงืื ืืื ืืื ืื ืื ืืืงืืื ืฉื vue ืขืืื ืืชืืชื ืืื:
https://www.tocode.co.il/blog/2024-10-vue-async-fetch
ืืขืชื ืืืืฉืืช ืฉืืื ืื ืื ืฉื vue ืืจืื ืืืชืจ ืคืฉืื ืืืจืื ืคืืืช ืืืืื.1 418
ืงืืืคืื ื ืืืช ืืกืื ืืจืื ืืืช ืืจืืืงื 19
ืจืืืงื 19 ืฉืืืจืจ ืืืฉ ืืคื ื ืืื ืืืื ืืืคืืฆ'ืจ ืืื ืืจืืฉ ืฉืืื ืืืื ืืฉืืืื ืืื ืืชืืืื ืืงืืืคืื ื ืืืช ืืกืื ืืจืื ืืืช. ืืคืืกื ืื ื ืจืื ืืื ืื ืขืืื ืืืื ืืฉืื ืืฉืื ืื.
ืืื ืืืฆืืจ ืชืืื ืืช ืจืืืงื 19 ืขื Vite
ืืืื ืฉืืื ืืืฉ ืชืืื ืืช ืจืืืงื ืืืฉื ืฉื ืืฆืืจ ื vite ืขืืืื ืขืืืืช ืขื ืจืืืงื 18. ืืื ืืฉืืจื ืืจืืืงื 19 ืืฉ ืืฉื ืืช ืืช ืืืจืกืืืช ืืกืคืจืืืช ื 18 ื 19 ืืงืืืฅ package.json. ืืืช ืืจืฉืืื ืืฆืื ืืคืจืืืงื ืืืฉ ืฉืฉืืืจื ืืจืืืงื 19:
{
"name": "react-19-async-components",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc -b && vite build",
"lint": "eslint .",
"preview": "vite preview"
},
"dependencies": {
"react": ">=19",
"react-dom": ">=19"
},
"devDependencies": {
"@eslint/js": "^9.15.0",
"@types/react": "^19",
"@types/react-dom": "^19",
"@vitejs/plugin-react": "^4.3.4",
"eslint": "^9.15.0",
"eslint-plugin-react-hooks": "^5.0.0",
"eslint-plugin-react-refresh": "^0.4.14",
"globals": "^15.12.0",
"typescript": "~5.6.2",
"typescript-eslint": "^8.15.0",
"vite": "^6.0.1"
}
}
ืืฆืืจืช ืงืืืคืื ื ืื ืืกืื ืืจืื ืืช
ืืืืจืช ืงืืืคืื ื ืื ืืกืื ืืจืื ืืช ืืจืืืงื ืืฆืขืจื ื ืื ืงืืจืืช ืขื ืคืงืืืช async ืืื ืืืืจื ืฉื ืคืื ืงืฆืื ืืกืื ืืจืื ืืช ืจืืืื ืืื ืืืืฆืขืืช ืฉืืืืฉ ื Hook ืืืฉ ืฉื ืงืจื use. ืืคืื ืงืฆืื use ืืืืขืช ืืงืื Promise, ืืืงืืืคืื ื ืื "ืชืืคืขื" ืจืง ืืฉื Promise ืืชืืืฉ. ื ืฉืื ืื ืฉืืคื ื ืฉื ืืื ืืืคืขืื ืืช ืืงืืืคืื ื ืื ืืืกืื ืืจืื ืืช ืขืืื ื ืืขืืืฃ ืืช ืืขืฅ ืฉืืืฆืจ ืืืชื ืืืืื ื Suspense ืฉื ืจืืืงื, ืืืืืจ ืืงืื ืืจืืฉื ื App.tsx ืืื:
import { Suspense } from 'react'
import AsyncData from './AsyncData';
import './App.css'
function App() {
return (
<main>
<h1>Async Component Demo</h1>
<Suspense fallback={<p>Loading, please wait ...</p>}>
<AsyncData />
</Suspense>
</main>
)
}
export default App
ืืฆื ืฉื ืืงืืืคืื ื ืื ืขืืื ื ืืืฆืืจ Promise ืืืืฅ ืืงืืืคืื ื ืื, ืืืขืืืจ ืืืชื ืคื ืืื ืืชืื ืคืงืืืช use ืืืืฉืชืืฉ ืืืืืข ืฉืืืืจ ืืื ื:
import {use} from 'react';
const dataPromise = fetch(\https://swapi.dev/api/people/1\).then(r => r.json());
export default function() {
const data = use(dataPromise);
return (
<div>
<p>Ready!</p>
<p>Received Data for: {data.name}</p>
</div>
)
}
ืฉืืื ืื ืฉื Promise ื ืืฆืจ ืืืืฅ ืืคืื ืงืฆืืืช ืืงืืืคืื ื ืื. ืืฆืืจืช Promise ืืื Side Effect ืืืื ืื ื ืงืจื ื fetch ืืชืื ืคืื ืงืฆืืืช ืืงืืืคืื ื ืื ืื ืคืขื ืฉืจืืืงื ืืฆืืจื ืืจื ืืจ ืืช ืืงืืืคืื ื ืื ืืืืฉ ืืื ืืคืขืื ืืช ื fetch ืืืืฉ ืื ืืื ืก ืืืืืื ืืื ืกืืคืืช ืฉื ืืฉืืืช ืืืืข ืืื ืงืจืืื ืืคืื ืงืฆืืืช ืืงืืืคืื ื ืื ืืื ืืงืื ืืช ื JSX, ืื ืฉืืืจืื ืืืคืขืื ืืืฉื ืฉื ื fetch ืืืฉืืืช ืืืืืข ืืืืฉ ืืื ืืืื. ืื ืืชื ืฆืจืืืื ืืืฉืื ืืืืข ืืคืื ืงืฆืื ืฉื ืืงืืืคืื ื ืื (ืืืฉื ืืคื id ืฉืขืืืจ ื props) ืืชืื ืืช ืืื ืืืื ืฉืืฆืืชื ืืื ืชืืื ืืื ืืคืฆื ืืช ืืงืืืคืื ื ืื ื-2 ืืืฉืื ืืืืง Suspense ื ืืกืฃ ืืงืืืคืื ื ืื ืืขืืืคืช, ืืืืืจ ืงืื ืืื:
import {Suspense, use, useState, useEffect} from 'react';
export default function(props: {id: number}) {
const {id} = props;
const [activeFetch, setActiveFetch] = useState(Promise.resolve({} as Record<string, string>));
useEffect(() => {
setActiveFetch(fetch(\https://swapi.dev/api/people/${id}\).then(r => r.json()))
}, [id])
return <Suspense>
<ShowAsyncData dataPromise={activeFetch} />
</Suspense>
}
function ShowAsyncData(props: {dataPromise: Promise<Record<string, string>>}) {
const {dataPromise} = props;
const data = use(dataPromise);
return (
<div>
<p>Ready!</p>
<p>Received Data for: {data.name}</p>
</div>
)
}
ืืกืืื ืฉ useEffect ืืื ืื ืืกืคืืง ืืื ืฉื Suspense ืืืืืฃ ืืช ืืงืืืคืื ื ืื ืฉืืชืืื ืืชืืฆืื ืฉื ืืงืืืคืื ื ืื ืืืกืื ืืจืื ืืช, ืืืืคื ืฉืฉืงืืื ืืฉืื ืื key, ืืืืืจ ืืืฉ ืืืฆืจืื ืืืืฉ ืืช ืืงืืืคืื ื ืื - ืืืื ืืืคืงื ืืืคืขื ืืืืฉ, ืืคืืื ืฉ id ืื ืืฉืชื ื. ืืื ืืืืืื ืืืฆืืจ ืืช ื Promise ืืืืฅ ืืืืืง ื Suspense ืฉืืืฉืคืข ืื use.1 418
ื ืืกืื ืจืืืืก - ืฉืืืืฉ ื Vue ืืื Build Step
ืืื ืืืจื ืืื ืฉื ืจืืืืก ืืืื ืืื ืืืืชืจ ืขื ื Build Step ืืืืฉืชืืฉ ืจืง ื JavaScript. ืื ืืกืื ืืืื ืืชืืชื ืคืจืืืงื ืจืืืืก ืฉืืฉืื ืืช vue ืืื ืืจืืืช ืืื ืื ืขืืื ืืืื ืื ืฉืื ื ืืคืจืืืงื ืฆื-ืืงืื ืจืืื.
ืืื Vue ืขืืื ื JavaScript
ืื ืื ื ืจืืืืื ืืืชืื vue ืืงืืฆื vue ืืืืจืืฅ ืืช vite ืืื ืืืคืื ืืช ืืื ื JavaScript ืจืืื. ืื ืจืืฆืื ืืืืชืจ ืขื ื Build Step ืื ืืืืจ ืืืืชืจ ืขื ืงืืฆื ื vue ืืืขืืืจ ืืืชืื ืงืืฆื js ื HTML. ืืฆืจืชื ืคืจืืืงื ืจืืืืก ืืืชืืื ืงืื ืืจืืืจ ืืฉื HelloWorld ืืืชืืชื ืืช ืืงืื ืืื ืืงืืืฅ ืืชืื ืืช
viesws/hello_world/index.html.erb:
<div id='app'>
<h1>HelloWorld#index</h1>
<p>{{message}}</p>
<Counter />
<p>The end</p>
</div>
<script type="module">
import { createApp, ref } from 'vue'
import Counter from 'controllers/counter';
createApp({
setup() {
const message = ref('Hello Vue!')
return {
message
}
}
})
.component('counter', Counter)
.mount('#app')
</script>
ืืฉ ืื ื ืงืืืฅ HTML ืขื ืชืืืช div ืืฉื app ืืืชืืื ืืชืื ืืช ืฉืืืืชื ืจืืื ืืจืฉืื ืืชืืืช template ืืงืืืฅ vue. ืืชืืชืื ืืืืืง ืืกืงืจืืคื ืื ืื ื ืจืืืื ืืช ืืงืื ืฉืืืืฆืจ ืืช ื"ืืคืืืงืฆืื", ืฉืื ืืขืฆื ืงืื ื vue ืฉืืชืืืฉ ืืชืื ืืชืื ืืช. ืืืฉืชื ื message ืฉืืืืืจ ืืกืงืจืืคื ืืืืจืง ืืขืืื ืืืงืื ืืืืจืืืช {{message}} ืฉื ืืฆืืช ื HTML.
ืืื ืืืื ืฉืื ืื ื ื Rails ืืคืฉืจ ืืื ืืืฉืชืืฉ ืืื ืืื ืื ืื ืื ืฉื ERB ืืื ืืืฆืืจ ืืช ืืชืื ืืช ืื ืืฉืชืื ืืฉืชื ืื ืืงืื ืฆื ืืฉืจืช ืืชืื ืงืื ืืกืงืจืืคื ืฉืืชืื ืืช.
ืคืืชืื ืงืืืคืื ื ืื
ื vue ืืืงืื ืืืงืื ืฉืืคืฉืจ ืืืฉืชืืฉ ืืื ืืืื ืืงืืืืช ื ืงืจืืื ืงืืืคืื ื ืืืช. ืืืืืื ืฉืื ื ืฉืืื ืื ืืงืืืคืื ื ืื counter ืฉื ืฉืชืืช ืืชืื ืืชืื ืืช ืืื ืื ืืืืืจืช ืืงืืืฅ ืืืืืื. ืืงืืืคืื ื ืื ืืืืืจืช ืืงืืืฅ JavaScript ืจืืื ืืฉื app/javascript/controllers/counter.js ืืืืืืืช ืืขืืจืช ืคืงืืืช import. ืื ืชืืื ืืงืืืฅ:
import { ref } from 'vue';
export default {
template: \
<button @click="count++">{{count}}</button>
\,
setup() {
const count = ref(0)
return {
count,
}
}
}
ืืืืืจ ืืงืื vue ืืืขื ืจืืื, ืจืง ืฉืืืงืื ืืืฉืชืืฉ ืืคืืจืื ืงืืืฅ vue ืืชืืืช template ืื ื ืืืืฆื ืืืืืงื ืฉืืฉ ืื ืืคืชื ืืฉื template. ืืื ืืขืื ืืชืื ืงืืืคืื ื ืื ืืื ืืงืจืื ืืขืื ืงืืืคืื ื ืืืช ืื ืืืขืืืจ ืคืจืืืจืื ืืงืืืคืื ื ืืืช ืืืืืง ืืื ื vue ืจืืื. ืืืขืฉื ืจืื ืืงืื ืฉื ืืืขืจืืช ืืืื ืื ืจืื ืืชืื ืืงืืืคืื ื ืืืช ืงืื ืืช ืืงืืฆืื ืืืื, ืืืชืื ืกืงืจืืคื ืฉื ืื ืืฃ (ืื view) ืชืืื ืืคืืืงืฆืืืช vue ืฉืชืืขื ืืช ืืงืืืคืื ื ืื ืื ืืงืืืคืื ื ืืืช ืืืจืืืืืช ืืืืชื ืืฃ.
ืื ืขืื ืฆืจืื
ืืงืืืฅ ืืืืจืื ืฉืืฉืืง ืชืคืงืื ืื ืืกืื ืืื ืืงืืืฅ config/importmap.rb ืฉืืืืืจ ืืช ื Import Maps, ืืืืืจ ืืช ืืืืคืื ืืื ืืืจืื ืฉืื ื ืขืืฉื ืืื import ืืชืื ื JavaScript ืืงืืฆื js ืืืืชืืื ืขื ืืืืกืง. ืืื ื ืจืื ืืื:
* Pin npm packages by running ./bin/importmap *
pin "application"
pin "@hotwired/turbo-rails", to: "turbo.min.js"
pin "@hotwired/stimulus", to: "stimulus.min.js"
pin "@hotwired/stimulus-loading", to: "stimulus-loading.js"
pin "vue", to: "https://unpkg.com/vue@3/dist/vue.esm-browser.js"
pin_all_from "app/javascript/controllers", under: "controllers"
ืืืื ืื ืื ื ืจืืืื ืืช ืฉื ืืกืคืจืื controllers ืืืืื ืื ืืืืคื ืื ืืืืข (ืื ืชืื ืืช ืฉื ืคืจืืืงื ืจืืืืก ืืืฉ ืืฉืชืืฉืช ื Stimulus ื controllers ืื ืฉื ืืกืคืจืื ืฉืื ืืฉื).
ืกื ืืื ืืงืื ืขืืื ืื ืจืื ืื ืจืข. ืืืื ืืชืช ืคืืชืจืื ืืื ืืฉืจืืฆืื ืืฉืื ืกืคืจืืืช Vue ืืคืจืืืงื ืจืืืืก ืื ืืฉืจืืฆืื ืืืืื ืงืฆืช ื Stimulus. ืืืืื ืื ืืืฆืื ืืช ืืงืื ืืืื ืฉื ืคืจืืืงื ืืืืืื ืืืืืืื ืืื:
https://github.com/ynonp/rails-vue-demo1 418
ืืฆืืจืชื ืื ืืฆืจื ื
ืฉืชื ืืืืื ืืืื ืืืืืช ืืขืืจืืช ืขื ืืฉืืขืืช ืฉืืคืขืืื ื ืจืืืช ืืคืืื. ืื ืฉืื "ืคืจืืืืงืืืืืื" ืืืืฆืจืื ืืืจืื ืืืืจืืื ืืืืจื ืืคืขืื. ืื ืฉืื "ืงืจืืืืืืืืืื" ืืืฆืืืื ืจืขืืื ืืช ืืืฉืื, ืกืืคืืจืื, ืืืื ืืช, ืฉืืจืื. ืืื ืฉืืืื ืืืืืช ืืฆืืจืชื ืืื ืื ืืคืจืืืืงืืืื ืฉืืฉืื ืืช ืืืฉืืื. ืื ืืคืืืช ืืื ืืฉืื ื.
ืืขืืื ืฉื ืืืื ืืื ืฉืชื ืืืืื ืฉืืืืืืช ืืื ืื ืืื. ืื ืื ื ืื ืฆืจืืืื ืขืื ืืืื ืืืช, ืขืื ืืืืืืืืืช ืื ืขืื ื ืืืจ ืืืืื, ืืคืืื ืื ืชืฆืืืื ืืืืฆืจ ืืืชื ืงืฆืช ืืืชืจ ืืขืื ืื ืงืฆืช ืืืชืจ ืืื. ืืคืจืืืืงืืืืืืช ืืืื ืืื ืงืืื ืื ืืืืืืช ืืจืืืช ืื ืื ืฉืื ืฆืจืืืื ืืืืืฆืื ืคืืชืจืื ืืช ืืืขืืืช ืฉืืืจืื ืขืื ืื ืจืื. ืงืจืืืืืืืืืืช ืืื ืืืกืืก ืืคืจืืืืงืืืืืืช.
1 418
ืฉืชื ืืจืืื ืืืจืืืข ืืช TypeScript ืืฉืืฉืชืืฉืื ื inject ื vue
ืืงืื ืืื ืขืืื, ืืื ืืืจื ืืืืืคืกืงืจืืคื ืืืขืืก:
<script setup lang="ts">
import { inject } from 'vue';
import { translations } from './InjectionKeys';
const texts = inject(translations);
</script>
<template>
<button>{{ texts['click-here'] }}</button>
</template>
ืืงืืืคืื ื ืื ืืืงืืช ืืืงืื ืืงืกื ืืช ืืขืจื ืืื ืงืจืื ืฉื ืืืฉืชื ื translations ืืื ืืืฉืืช ืืื ื ืืช ืืชืจืืื ืฉื ืืืงืกื click-here. ืืื ืฉืืืืืช ืืงืื ืกืื ืืขื ืืืกื ืืื ื ืจืื ืชืงืื. ืืืชืจ ืืื, ืื ืืืขืืช ืืืฉืื ืฉืื ืืขืฉืืช provide ื texts ืืื ื ืจืื ืืช ืืฉืืืื ืืงืื ืกืื ืื ื ื ืกื ืืงืจืื ืืคืชื ืืชืื null. ืื ื ืืกืืจ ืขื ืืืชื ืืืืช ืืืืช ืื ืืื ืื ืื ืืขืฉืืช ืขื ืืืขืจืืช ืื ืืคืืื ืืืงืกืืื ืื ื ืืขื ื. ืืืขืื ืฉืืืืคืกืงืจืืคื ืื ืืืืข ืืช ืื ืื ืฉืื ื ืืืืข ืืืกืื ืืช ืฉืืจืช ืืืคืชืืจ ื template ืืืืื. ืื ืขืืฉืื? ืฉืชื ืืฆืขืืช-
ืืจื ืืืช ืืื ืืืืกืืฃ ืืืืงื ืืงืื ืืกืงืจืืคื ืืืจื inject:
<script setup lang="ts">
import { inject, ref } from 'vue';
import { translations } from './InjectionKeys';
const texts = inject(translations);
if (!texts) {
throw new Error("Missing texts in parent component");
}
</script>
<template>
<button>{{ texts['click-here'] }}</button>
</template>
ืงืืืื ื ืืืืขืช ืฉืืืื ืงืฆืช ืืืชืจ ืืืื ืืืืืคืกืงืจืืคื ืจืืืข. ืืจื ืฉื ืื ืืื ืืืขืืืจ ืคืจืืืจ ืฉื ื ื inject ืฉืืื ืขืจื ืืจืืจืช ืืืืื:
<script setup lang="ts">
import { inject, ref } from 'vue';
import { translations } from './InjectionKeys';
const texts = inject(translations, ref<Record<string, string>>({}));
</script>
<template>
<button>{{ texts['click-here'] }}</button>
</template>
ืคื ืืงืื ืืืชืจ ืงืฆืจ ืฉืื ื ืืื, ืืื ืืืืกืจืื ืืื ืฉืขืืฉืื ืื ืืืฉืื ืฉืืื ืืืขืืืจ ืืช texts ืืงืืืคืื ื ืื ืขืืืื ื ืืืชืจ ืื ื ืจืื ืฉืืืื ืืงืื ืกืื ืืื ืจืง ืืงืกืืื ืจืืงืื. ืื ืจืื ืฉืื ืื ืื ื ืืจื ืื ืืืช ืฉืืืื ืฉืืืื ืงื ืืืืืช.
ืืืื ืืฉืชื ืืืืฉืืช ืืชื ืืขืืืคืื? ืื ืฉืืืื ืืฉ ืืื ืืื ืืงื ืืืจืช? ืืืืื ืื ืืกืคืจ ืืชืืืืืช ืื ืืืืืจื.1 418
ืขืื ืืื ืืขืืืช ืขื ืขืืืื ืืืืชืจืช
ืืคืืกื ืืื ื ืืืข ืื ืงืืื ืืืื ืืืื SQL:
https://www.depesz.com/2024/12/01/sql-best-practices-dont-compare-count-with-0/
ืืงืฆืจื ืืื ืืกืืืจ ืืื ืื ืืืื ืืืชืื ืืช ืื:
SELECT u.* FROM users u
WHERE 0 = (SELECT COUNT(*) FROM addresses a WHERE a.user_id = u.id);
ืืฉืืขืฆื ืืื ืฆืจืื ืืืชืื ืืช ืื:
SELECT u.* FROM users u
WHERE NOT EXISTS (SELECT FROM addresses a WHERE a.user_id = u.id);
ืืื ืื ื ืืืฉื ืฉืื ืงืืื ืคื ืืืชืจ ืืืืื ื SQL ืืืืชืจ ืืืืื ืืืขืืืช ืืืฆืืขืื ืืืช ืคืืืช:
1. ืงืื ืจืข ืืฉืชืืคื - ืืฉืื ื ืืืืง ืื count ืฉื ืืฉืื ืฉืืื 0, ืื ืื ืืืงืจื ืืกืคืฆืืคื ืฉืื ืื ืื ืฉืืจ ืืช ืืืขืจืืช, ืืืฉืื ืืืจ ืืขืชืืง ืืช ืื ืืืงืื ืืืจ ืืฉื ืืืื ืื ืืืฉืืจ. ืืื ืงืืืื ืขื ืขืืื ืื AI ืืืชืื ืงืื, ืชืื ืืืช ืจืขืืช ืืงืื ืฉืื ื ืืืืืืช ืืืฉืชืืคื ืืจืื ืืืชืจ.
2. ืงืื ืจืข ืืื ืืืจื ืจืข - ืืชืื ืชืื ืฆืขืืจืื ืฉืืขืืื ืขื ืืขืจืืช ืขื ืืจืืืื ืจืขืื ืืืืฆื ืืช ืืืชื ืืจืืืื ืจืขืื ืืืคืืื ืื ืืืขื ืฉืงืืืืช ืืจื ืืืชืจ ืืืื. ืืืื ืื ืื ื ืืงืืืื ืืคืชืืื ืขื 5 ืฉื ืื ื ืืกืืื ื SQL ืฉืขืืืื ืืืื ืืืคืชืขืื ืืืืืช ืฉืืฉ ืืืจ ืืื EXISTS, ืื ืื ืืฃ ืคืขื ืื ืจืื ืืืชื ืืงืื ืฉืืื.
ืืคื ืืืฉืืืืช ืฉื ืืืืจืืช ืืืื ืขื ืืฉืคื: ืืื ืฉืื ื ืืืืจ ืืื ืืืชืจ ืืช ืื ืืคืงืืืืช ืืฉืคื ืงื ืื ืืืชืจ ืืืฆืื ืืช ืืคืงืืื ืฉืคืืชืจืช ืื ืืช ืืืขืื ืืฆืืจื ืืืืืงืช, ืืขืืื ืืืขืืืจื ืืช ืืืกืจ ืื ืืื ืืืื ืฉืืงืจืื ืืช ืืงืื.1 418
ืืฆืขื ืืคืจืืืงื - ืืืฉืื ืืืืื ืืืชื
ืืืืื ืืื ืขื ืืืจืื ืืืื ืืืืืช ืืจืื ืืืชืจ ืืคืงืืืื ืืืืืื ืืื: ืืืืืืืืช ืืืืจืชืืช ืืืืืจื ืืช ืืืืืืืฆืื, ืืืจืื ืืืืืื ืืขืืืจ ืืฉืื ืื ื ื ืชืงืขืื ืืืืขืืืช ืฉืืืืช ืฉืื ืืฉืื ื ืขืืืื.
ืขืืฉืื ืขื ื AI ืืคืืื ืื ืฆืจืื ืืืจื ืฉืืืืื ืืืชื ื. ืืืื ืชื ื ืืฉื, ืืืืจื ืืืืื ืืจืฉืืืช ืืฉืืืืช ืืชืื ืชืื ืืขืื ืืืืืืฆืื ืืืืืื ืืืืืข ืืืื ืจืืืง. ืืื ื ืจืขืืื ืืคืจืืืงื ืฆื ื ืืื ืืื ืงืฉื ืืื, ืืขืจืืช ืืืงืื ืืชืคืขืื ืงืืืฆืืช ืืืืื. ืืืืื:
1. ืืฉืชืืฉืื ืืืืืื ืืืืื ืก ืืืืงืื ืืกืืืื ืืืืื. ืืกืืืื ืืืืืื ืืืืื ืืืืืช ืืชืฉืืื ืื ืืืื ื, ืืื ืืืืืื ืกืืืืืก ืืกืืืจ, ืืฉืืืืช ืืืืื ืคืืชืจืื ืืช ืขื ืืกืืจืื.
2. ืืฉืชืืฉืื ืืืจืื ืืืืืื ืืืืื ืก ืืืืงืื ืงืืืฆืืช ืืืืื. ืืฉืื ื ืืงืื ืงืืืฆืช ืืืืื ืื ื ืืืืจ ืืช ืืฉืขืืช ืืืืืื ืืื ืืกืชืืจ ืื ืืืืื, ืืกืคืจ ืขื ืขืฆืื ืืื ืืจืื ืฉืื ืืขื ืืืื ืกืื ืืคืชืืื ืืืืชื ืจืืฆื ืืืืื. ืืืงืืช ืงืืืฆืช ืืืืื ืื ื ืื ืืืืจ ืืช ืืกืืื ืืืืืื ืฉื ืืงืืืฆื.
3. ืืฉืชืืฉืื ืืืจืื ืืืืืื ืืืืื ืก, ืืืคืฉ ืงืืืฆืืช ืืืืื ืืืืฆืืจืฃ.
ืื ื ืืืฉื ืฉืืืฉืืง ืฉื ืงืืืฆืืช ืืืืื ืืืฆื ืืืชืื ืืช ืฉื ืืชืจื ืงืืจืกืื ืืืฉื ื ืืช ืืคืืงืืก, ืืืงืื ืืืืืจ ืงืืจืก ืืคื ืืืงืืจืืช ืื ืกืืืืืก, ืื ื ืืืืจ ืืคื ืืื ืฉืื ืืืชื ืื ื ืจืืฆื ืืืืื. ืืจืื ืคืขืืื ืืชืืฆืื ืชืืื ืืืืื ืืืชืจ ืืคืงืืืื.
ืืืฉืืื ืืื ืืช ืืช ืืคืจืืืงื ืืจืืฆืื ืืืชืืืขืฅ ืขื ืืื ืืืืืื ืื ืืจืืืืงืืืจื? ืื ืชืชืืืืฉื ืืืฉืืืจ ืืืืขื. ืื ืืชื ืืืชื ืื ืืฉืื ืืืื? ืกืคืจื ืื ืขื ืื ืืืฉืื ืืืฉืชืืฉ ืืืขืืืจ ืืื ืืงืื.
1 418
ืืื ืืขื ืืช ืขื ืฉืืืช ืจืืืื ืขืืืื
ืืืฉืื ืคืจืกื ืฉืืืช ืจืืืื ืืช ืขืืืื ืืคืฉืืช ืขื JavaScript ืืฉืื ืื ืืืื ืืคืื ืฉื ืืชืืื ืืช ืืืื:
function sayHi() {
console.log(name);
console.log(age);
var name = 'Lydia';
let age = 21;
}
sayHi();
ืื ืื ืืฉืื ืขืืฉืื ืื ืืชืฉืืื. ืืชื ืืืืืื ืืืืช ื Chat GPT ืืืจืจ. ืื ืฉืืืชืจ ืืขื ืืื ืื ืืื ื ืืชืฉืืื ืฉื ืืืชื Chat GPT:
1. ืืืฉืคื ืืจืืฉืื ืืกืืืจ ืืช ืืืืจื ืฉื ืืฉืืื - ืื ืฉืืื ืฉืืืืงืช ืืช ืืืืืจืืช ืฉืื ืขื ืืจืขืืื ืืช ืฉื Variable Hoisting ื Block Scoping ื JavaScript. ืืืืช ืืืืืง ืืืจื ืฉืืืื ืืืชืืื ืชืฉืืื ืืฉืืืืช ืื ืืจืืืื ืืืืชื.
2. ืืืจื ืื Chat GPT ืืกืืืจ ืขื ืืจืขืืื ืืช ืืืกืคืจ ืื ืืืืื ืืื var ื let ืืืงืฉืจ ืฉื ืืืฉื ืืืฉืชื ื ืืคื ื ืฉืืจืช ืืืืืจื ืฉืื.
3. ืืืืจ ืืื ืืื ืขืืืจ ืฉืืจื ืฉืืจื ืืืกืืืจ ืื ืืื ืขืืฉื ืืืื (ืื ืงืฆืช ืืืืชืจ ืืขืื ืื).
4. ืืืกืืฃ ืืจืื ืืช ืคืื ืืชืืื ืืช.
ืฉืืชื ืื ืฉืืืืจ ืฉืืื ืืจืฉืื ืืืชื ืืื ืื ืื ืืื ืืฉืืืืงืชื ืืช ืืฉืืื ื Chat GPT ืืชื ืืช ืฉืืืช ืื ืืฉืืื ืืืชื ืืฉืืื ืืื ืืืืื. ืฉืืืืฉ ืืฉืืืช ืื ืืื ืื ืืจืื ืื ืฉืืชืฉืืื ืืชืืืกืช ืืืืืง ืืืืจืื ืฉืจืฆืืชื ืืืืืง ืืื ืื ืืช ืืืกืืืืช ืืชืงืฉืืจืช ืืืื ืขื ื ืืฉืืื ืืื.1 418
ืกืืคืืจ, ืืฉืคืืื, ืืืืื.
ืืกืืคืืจ ืืฉ ืืชืืื, ืืืฆืข ืืกืืฃ. ืืคืขืืื ืื ืขืืืื ืืืฉืืฉ ืื ื ืืื ืืื ืืขืืจืจ ืืืฉืื ืืืขืืืจ ืืกืจ. ืืช ืื ืืืืื ืืื ืืืื ืกืืคืจืื ืืื ืื ืืืืฆืขืืช ืืฉืคืืื ืืืืจืืืื ืืืืืื. ืกืืคืจืื ืฉืื ืื ืืืืืื ืืืชืื ืขืืืืืช ืืืืืช ืืืกืจืื ืืืืื ืืืืฉืชืืฉ ืืืืืื ืืืจืืช ืืืืจื - ืืืืจืืช ืืขืืืื ืืืื ืืจืืจ ืฉืื ืื ืืืื ืืืชื ืกืืคืืจ. ืืคืจืืื ืืฉืืืื.
ืื ืืงืื ืฉืื ื ืืกืคืจ ืกืืคืืจ, ืืื ืืช ืืงืื ืื ืื ื ืืื ืื ืืืืืืจ ืฉื ืงืืขื ืงืื ืงืื ืื ืืืชืจ ืืจื ืชืื ืืืช. ืืืคืืื ืื Chat GPT ืืกืืื ืืงืื ืืฉืืื ืืืืฆืืข ืืืืืฉ ืืกืืื, ืืื ืืขืืื ืื ืืืืืฃ ืืช ืืืชืื ืชืื ืฉืืืืืื ืืืชืื ืืกืคืจ ืืืืืฉืื ืืื ืืื ืืื ืืื, ืืื ืืืชื ืกืืคืจืื ืืืืื ืื ืฉืืืืืื ืื ืกื ืืืจืืื ืฉืื ืืช ืืช ืืืชื ืจืขืืื ืืช. ืืื ืชืื ืืช ืื ืขืืืื ืืฆืืจืชืืช, ืืืืฆืืจืชืืืช ืืืจืฉืช ืืืืจืืช ืืขืืื ืขื ืชืื ืืืช ืืื ืฉืืคืฉืจ ืืืื ืืฉืื ืืืชื (ืืืฉืืืจ ืืืชื) ืืืจืืื ืฉืืชืืืืืช ืืืขืจืืช ืขืืื ืื ืื ื ืขืืืืื.
ืืชืื ืชืื ืืฉืชืคืจืื ืืื ืฉืืืชืืื ืืืชืจ ืคืจืืืงืืื ืืชืืื ืืืช, ืืฉื ืฉืกืืคืจืื ืืฉืชืคืจืื ืืื ืฉืืืชืื ืืืชืจ ืกืืคืืจืื. ืืื ืืขืืืื ืจืง ืขื ืคืจืืืงืืื ืืืืื ืืฉ ืชืืื ืืช ืืกืื ื ืืืื ืขื ืืืจืื ืงืื ืื, ืืืืืจ ืฉืื ืืฉืื ืขื ืืื ืืงืืช ืื ืืกืคืืง ืืืืืช, ืจืง ืืืื ืฉืื ืื ื ืืืจ ืจืืืืื ืืืืื. ืืื ืื ืืกืฃ ืืขืืืื ืขื ืคืจืืืงืืื ืืืืืื ืืชืื ืชืื ืืืืื ืืฉืงืืขืื ืื ืืื ืืฉืืคืืจ ืืืชื ืชืื ืืืช ืงืื ืืช ืฉืืจืืืืืช ืืช ืืงืื ืฉืื ื - ืชืืื ืืืช ืฉื ืขืฉืจืืช ืฉืืจืืช ืืื ืืืืชืจ ืฉืคืืชืจืืช ืืขืื ืกืคืฆืืคืืช, ืืขืืจ ืขื ืืกืคืจ ืคืืชืจืื ืืช, ืืฉืืืื ืืื ืืื ืืืืคืืฉ ืืคืืชืจืื ืืคืฉืื ืืืืื ืืืืชืจ. ืืื ืื ืืืื ื ืฉืืคืขืืื ืจืขืืื ืืื ื ืฉืืจ ืืฉืืืจืืฉืืช ืืฉืชื ืืช, ืืืืืืืจ ืืืื ืืจืืฉืืช ืืืืืืช ืืืฉืชื ืืช.
ืืช ืื ืืขืืืื ืืืืช ืืฉืื ืืฆืืจื ืืืคืืื ืืจืืง ืืืกืื ืื ืฉื ื ืืคืจืืืงื Advent Of Code ืฉืื, ืฉื ืืื ืืฉืชืฃ ืื ืืื ืืืืื ืืฆืืืจ ืืืืช ืชืื ืืช ืงืื ื ืืืืจืืืช ืืฉื ื ืืืงืื, ืืจืง ืืืจื ืคืืชืจืื ืืืืง ืืจืืฉืื ืืืคืืข ืืืืง ืืฉื ื. ืืืืืืช ืืืืงืืืช ืืืืื ื ืืืืคืฉืจืืช ืืืชืืื ืขื ืืืืงืื ืืงืื ืื ืืืกืคืฆืืคืืื ืืืืชืจ ืืงืื: ืืืืื ืืช ืืืจืืฉืืช, ืืคืชืืจ ืืขืืืช, ืืืืืื ืืืื ืฉืื ืืืื ืืืจืืฉืืช ืื ืจืื ืืืืขื ืืื ืืจืืืช ืืช ืืฉืื ืืืื ืืืจืืฉืืช ืฉื ืืจืืง ืืืืชืืื ืืช ืืคืืชืจืื ืฉืื ื ืืืจืืฉืืช ืืืืฉืืช.
ืืืื ืืื ืืืื ืืจืืฉืื ืฉื ืืฆืืืจ ืืืืืื ืืจืืฉืื ื ืฉื Advent Of Code ืืืืืง ืืชืคืจืกืื. ืืืฆืืื.
https://adventofcode.com
1 418
ืจืืืืจืื ื ืืื ืืืื ืืกืืืืื ืืฉื ืื ืืืืจืื ืืช ืืืื ืกืืืง ืจืืืืจ, ืืืจืืช ืืืืชื ืขืืืื ืืืชืจ ืคืฉืื ื React Router, ืขืืืื ื ืฉืืจ ืืืืจืฉ ืฉื ืืจืืืืจืื ืืืกืืืืื. ืื ืฉืืกืื ืืืชื ืืืขืชื ืื ืื ืื ืื ื Data Fetching ืืืืื ื, ืฉืืืจืื ืืช ืืจืืืืจ ืืืืื ืืืื ืื ืืืื ื Cache ืฉื ืืืืืข ืฉืืืืข ืืืฉืจืช. ืืืฉืืช ืืขืืคืชื ืืช ืืืืื ืฉืฉื ื ืืื ืื ืื ืื ืืืื ืืื ืืืืจืืืช ืกืคืจืืืช ืฉืื ืืช - ืืืืืจ ืืคืฉืจ ืืื ืืืฉืชืืฉ ื react-query ืื RTK Query ืืฉืืื ืฉืืืคืช ืืืืข ืืืกืคืจืื ืืืจืช ืืฉืืื ืื ืืชืื. ืืื ืืงืจื ืื ืืกื ืืื ืืืืืืช ื ืืกืืืืืื ืฉืื ืื ืื ื ืจืื ืฉืชืืื ืืจื ืืืจื.
ืกืคืฆืืคืืช ืืืื Tanstack Router ืืชืืื ื ืืืืืื ืฉืื ืืื ืฉืืืื ืืืืืคืกืงืจืืคื ืืื ืืืื ืืืืืช ืงืฆืช ื ืืื ืืง. ืงืืื ืื ืืฉืืื ืฉืงืืืฅ ื
routeTree.gen.ts ืืชืขืืื ืืคืจืืืงื ืฆืจืื ืืจืืฅ ืืืฆื ืคืืชืื, ืืืืืจ npm run dev ืฆืจืื ืืขืืื. ื ืืื ืจืื ืืืื ืื ื ืืฉืืืจ ืืืชื ืืืืง ืืื ืืคืขืืื ืื ื ืื ืืืชื ืงืื ืืฉืืื ืกืืืจ ืืื ืฆืจืื ืืืชืขืฆืื ืฉืืืืืคืกืงืจืืคื ืื ืืืื ืืช ืื ืชืืืื ืฉืืฆืจืชื.
ืืืืื ืฉื ืื ืืื ื ืชืืืื ืขื ืคืจืืืจืื, ืฉืืืจืฉืื ืชืืืืจ ืืืืื ื Link:
<Link to="/posts/$postId" params={{postId: "7"}}>Post 7</Link>
ื ืืกืืื ืืืชืื ืืช ืื ืืชืืจ ืืืจืืืช ืคืฉืืื ืฉืืืจ ืืช ืืืืคืกืงืจืืคื, ืืืืืจ ืื ืื ืขืืื:
<Link to="/posts/7">Post 7</Link>
ืืื ืืืื ืืืขืืืช ืขื ืืืืืคืกืงืจืืคื ืืขืืืื ืขื ืื ืกืืืง ืืืืื ื ืขืืื. ื ืืชืื ืืขืืจืช ืืขืจืืช ืงืืฆืื ืขืืืจ ืืฉืืืจ ืขื ืกืืจ ืืคืจืืืงื ืืื ืืจื ืืืืคืื ืฉืืื ืืคืจืืืจืื ืืืื ืืจืืจื ืจืง ืืืกืชืืืืช ืขื ืืขืจืืช ืืงืืฆืื.
ืืคืืกืืื ืืืืื ืื ื ืืงืืื ืืืืฉืื ืืืงืืจ ืืืชื ืืืืชืื ืืืชืจ ืืขืืืง ืขื Data API, ืขื ืืืืคืื ื Redirects ืืขื ืคืงืืืืช ื ืืชืื ืืชืื ืืงืื.1 418
ืขืฉืจ ืืงืืช ืขื Tanstack Router
ืขืืฉืื ืฉ React Router ืขืืื ื ืฉืื ืืช ืืืืจืกื, ืืคืขื ืืื ืืืคืื ืืคืจืืืืืืจืง ืืืืืื ืขื Remix, ืื ื ืืืฉื ืฉืืืืข ืืืื ืืืืื ืืคืฉืจืืืืช ืืืจืืช, ืืืืคืฉืจืืช ืืคืืคืืืจืืช ืืืืชืจ ืืืื ืืืื React Router ืืื Tanstack Router. ืืืื ื ืจืื ืงืฆืช ืงืื ืืืืืื ืืื ืืืืื ืืื ืื ืขืืื. ืงืื ืืืืืื ืฉื ืืคืืกื ืืืื ืืืืืืื ืืงืืฉืืจ:
https://github.com/ynonp/tanstack-router-simple-demo
ืงืืืฅ ื Layout
ืื ืกืืืง ืจืืืืจ, ืืืืื ื next.js, ืขืืื ืืคื ืฉืืืช ืงืืฆืื. ืืื ืืชืืืจ ื vite ืืื ืคืขื ืฉืื ืื ื ืจืฆืื ืืืฆื ืคืืชืื ืื ืื ืืื ืืื ืืืคืฉ ืืช ืืงืืฆืื ืฉื ืจืืื ืืื ื ืชืืืื ืืชืืงืืื ืืืืฆืจ ืืืืื ืืื ืงืืืฅ ืืืืข ืืจืืื ืขื ื ืชืืืื, ืื ืืื ืืฉืชืืฉ ืืงืื ืืื ืืกืคืง Type Safety, ืืืืืจ ืืืื ื Link ืืืื ืืืขืช ืื ืืื ืืืืื ืืืงืื ืฉืืืืช ืืชืืื ืื ืชืื ืืชืื ื Router ืืื ืืืชื ืฉืืืืช ืืชืื ืื ื ืืื ืืจืืืช ืืช ืื ืืืจ ืืืื ืืชืืืช ืืงืื.
ืืฉืืื ืืืชืงืื ืืช Tanstack Router ืืฉ ืชืืืื ืื ืืกืืจืื ืฉืืคืืจื ืืืฃ ืืืชืงื ื ืฉืืื:
https://tanstack.com/router/latest/docs/framework/react/installation
ืืืืื ืืืกืืคืื ืืืชื ื vite, ืืืืขื ืื ืืืชื ืืืงืืืฅ ืืจืืฉื ืืืืฉืื.
ืืืจื ืืืชืงื ื ืืคืฉืจ ืืืฆืืจ ืืช ืงืืฆื ืื ืชืืืื ืืงืืืฅ ืื ืชืื ืืจืืฉื ืืืืืื ืฉืืื ื ืงืจื
__root.tsx. ืื ืืงืื ืฉืื ืืชืื ืขื ืงืฆืช ืฉืื ืืืื ืฉืื:
import { createRootRoute, Link, Outlet } from '@tanstack/react-router'
import { TanStackRouterDevtools } from '@tanstack/router-devtools'
export const Route = createRootRoute({
component: () => (
<>
<div className="p-2 flex gap-2">
<Link to="/" className="[&.active]:font-bold">
Home
</Link>{' '}
<Link to="/about" className="[&.active]:font-bold ">
About
</Link>
<Link
to="/posts/$postId"
params={{postId: "7"}}
className="[&.active]:font-bold ">
Read Post
</Link>
</div>
<hr />
<Outlet />
<TanStackRouterDevtools />
</>
),
})
ืืคืงืืื createRootRoute ืืืืจืช ืฉืืืืืจ ืื ืชืื ืจืืฉื ืืืืืจ ืงืืืฅ Layout. ืืืืืงื ื component ืฉืื ืืื ืืงืืืคืื ื ืื ืืจืืฉืืช ืฉื ืืขืืื ืืืชืืื ืงืืืคืื ื ืืช Outlet ืชืฆืื ืืช ืืชืืื ืืืืืชื ืืืืืจ ืืช ืืงืืืคืื ื ืื ืฉืืชืืืื ืื ืชืื ืื ืืืื. ืืขื ื Outlet ืืฉ ืื ื ืชืคืจืื ื ืืืื ืืืชืืช ืืฉ ืื ื ืงืืืคืื ื ืื ืฉื ืืื ืคืืชืื. ืืื ืืคืืชืื ืื ืืขืฆื ืืืื ืฆืฃ ืงืื ืฉื ืืชื ืืืื ืืืืข ืขื ื Router ืืื ืชืืืื ืืฉืื ืื ืื.
ืงืืฆื ืื ืชืืืื
ืฉื ื ืืงืืฆืื ืืืืจืื ืืชืืื ืืช ืืืืืื ืฉืืืฆืขื ืืชืืขืื ืื about.lazy.tsx ื index.lazy.tsx. ืืฉื ืฉืืื ืืืจ ืืกืื ืื ื ืฉืืืืืจ ืื ืชืืืื ืขืฆืืื, ืืืืืจ ืฉืืงืื ืฉืืื ืืืืขื ืจืง ืืฉืืฉืชืืฉ ืืืื ืก ืืืืื ืืคืขื ืืจืืฉืื ื. ืื ื ืจืื ืชืืื ืืงืืืฅ about.tsx:
import { createLazyFileRoute, Link } from '@tanstack/react-router'
export const Route = createLazyFileRoute('/about')({
component: About,
})
function About() {
return <div className="p-2">
Hello from About!
<Link to='/'>Type Safe?</Link>
</div>
}
ืื ืืกืืื: ืืคืงืืื createLazyFileRoute ืืงืืืช ืืช ืื ืชืื ืืงืืืคืื ื ืื ืืืืกืืคื ืืืชื ืืจืฉืืืช ืื ืชืืืื (ืืืช ืฉื ืืฆืจืช ืืฆืืจื ืืืืืืืืช ืืงืืืฅ routeTree.gen.ts). ื Link ืฉืืืคืืข ืฉื ืืื Type Safe, ืืืืืจ ืื ืื ื ืื ืกื ืืืชืื ืืฉืื ืฉืื ืืชืืื ืืฉืื ื ืชืื ืืืคืืข ืฉื ืงื ืืืื ืืืื ืืืืืคืกืงืจืืคื.
ื ืชืื ืืื ืื
ืืฉืืื ืืืฉืืง ืืฆืจืชื ืงืืืฅ ื ืืกืฃ ืืฉื posts/$postId.lazy.tsx ืขื ืืชืืื ืืื:
import { createLazyFileRoute } from '@tanstack/react-router'
export const Route = createLazyFileRoute('/posts/$postId')({
component: Post,
})
function Post() {
const { postId } = Route.useParams()
return <div className="p-2">This is post number: {postId}</div>
}
ืฉื ืืงืืืฅ ืืืจ ืืจืื ืื ื ืฉืืฉ ืคื ืืฉืื ืืืืื. ืืืืืจ ืืชืืืืช ืฉื ืืงืืืฅ ืืืืจ ืฉ postId ืื ืฉื ืฉื ืคืจืืืจ ืืืืืช ืืชืื ืืืฃ ืืงืืืคืื ื ืื ืื ื ืืืื ืืืฉืชืืฉ ื useParams ืืื ืืืฉืช ืืขืจื ืฉื ืืืชื ืคืจืืืจ. ืคื ืืคืฉืจ ืืืืฆืื ืืงืฉืช ืจืฉืช ืืื ืืืฉืื ืืืืข ืืืื ืืืชื ืคืืกื ืืคื ืืืืื ืฉืื, ืื ืืืืขืืจ ืืื ืื ืื ื Data Fetching ืืืืื ื ืฉื Tanstack Router (ืขืืื ืืืื ืืืชืื ืืคืืกื ืืืจ) ืืื ืืฉืื ืืช ืืจืืืืจ ืขื ืื ืื ืื ืฉืืืคืช ืืืืืข.
ืขื ืื ืืคืฉืจ ืืืชืืื ื?
Endi mavjud! Telegram Tadqiqoti 2025 โ yilning asosiy insaytlari 
