API سراسری : عمومی
ورژن
نسخه فعلی Vue را نشان میدهد.
تایپ:
رشته(string)
مثال
jsimport { version } from 'vue' console.log(version)
nextTick()
یک ابزار است که برای انتظار بهروزرسانی بعدی DOM بهکار میرود.
تایپ
tsfunction nextTick(callback?: () => void): Promise<void>
جزئیات
وقتی در Vue حالت واکنشی(reactive state) را فعال میکنید، بهروزرسانیهای DOM به صورت همزمان اعمال نمیشوند. به جای اینکه Vue آنها را در همان لحظه اعمال کند،بدون توجه به تعداد تغییراتی که در آن حالت ایجاد کردهاید، آنها را درون «صف انتظار» قرار میدهد تا اطمینان حاصل شود که هر مؤلفه فقط یک بار بهروزرسانی میشود.
میتوانید
nextTick()
را فوراً پس از تغییر وضعیت صدا بزنید و منتظر بمانید تا بهروزرسانیهای DOM اعمال شود. این کار را میتوان با استفاده از یک تابع فراخوانی یا یک Promise برگشتی ناهمگام انجام داد.مثال
vue<script setup> import { ref, nextTick } from 'vue' const count = ref(0) async function increment() { count.value++ // DOM هنوز به روز نشده است console.log(document.getElementById('counter').textContent) // 0 await nextTick() // DOM اکنون به روز شده است console.log(document.getElementById('counter').textContent) // 1 } </script> <template> <button id="counter" @click="increment">{{ count }}</button> </template>
مشاهده بیشتر
this.$nextTick()
defineComponent()
یک ابزار کمکی برای تعریف یک کامپوننت Vue با استفاده از تعیین تایپ دادههاست.
تایپ
ts// سینتکس options function defineComponent( component: ComponentOptions ): ComponentConstructor // سینتکس تابع (نیاز به ورژن 3.3+) function defineComponent( setup: ComponentOptions['setup'], extraOptions?: ComponentOptions ): () => any
تایپ سادهتر شده است تا خوانایی بیشتری داشته باشد.
جزئیات
این تابع یک شیء از گزینههای کامپوننت را به عنوان آرگومان اول میپذیرد. مقدار بازگشتی همان شیء خواهد بود، چرا که این تابع در واقع هیچ عملیاتی انجام نمیدهد و تنها برای استنتاج تایپ داده استفاده میشود.
لطفا توجه کنید که تایپ بازگشتی کمی ویژه است: این تایپ بر اساس گزینههای ورودی، یک تایپ داده را مشخص میکند. وقتی این تایپ به عنوان یک تگ در TSX استفاده میشود، از اطلاعات موجود برای تعیین تایپ استفاده میکند.
شما میتوانید تایپ نمونهای که یک کامپوننت ارائه میدهد (که معادل تایپ
this
در گزینههای آن است) را با استفاده از تایپ بازگشتیdefineComponent()
به دست آورید.tsconst Foo = defineComponent(/* ... */) type FooInstance = InstanceType<typeof Foo>
امضای تابع
- فقط در 3.3+ پشتیبانی میشود.
defineComponent()
همچنین یک نوع امضای جایگزین دارد که برای استفاده با Composition API و توابع رندر یا JSX مناسب است.به جای ارسال یک شیء از گزینهها، انتظار میرود یک تابع مورد استفاده قرار گیرد. این تابع همانطور که تابع
setup()
در Composition API عمل میکند، ورودیها و setup context را دریافت میکند. مقدار بازگشتی باید یک تابع رندر باشد که از هر دوh()
و JSX پشتیبانی میکند.jsimport { ref, h } from 'vue' const Comp = defineComponent( (props) => { // از API ترکیب در اینجا استفاده کنید مانند آنچه در <script setup> انجام میدهید const count = ref(0) return () => { // تابع رندر یا JSX return h('div', count.value) } }, // گزینههای اضافی، مثلاً تعریف پراپ ها و emits { props: { /* ... */ } } )
اصلیترین کاربرد این امضای تابع در تایپاسکریپت (مخصوصاً در TSX) است زیرا از ژنریکها پشتیبانی میکند:
tsxconst Comp = defineComponent( <T extends string | number>(props: { msg: T; list: T[] }) => { //در اینجا از Composition API همانند `<script setup>` استفاده کنید. const count = ref(0) return () => { // تابع رندر یا JSX return <div>{count.value}</div> } }, // تعریف دستی ویژگیهای زمان اجرا همچنان الزامی است. { props: ['msg', 'list'] } )
در آینده، قصد داریم یک پلاگین Babel ارائه دهیم که به طور خودکار ویژگیهای زمان اجرا (مانند
defineProps
در فایلهای SFC) را استخراج و درج کند، به طوری که تعریف ویژگیهای زمان اجرا قابل حذف باشد.یادداشتی درباره ترمیم وبپک
چون
defineComponent()
یک فراخوانی تابع است، ممکن است به نظر برسد که این عملیات برخی از ابزارهای ساخت مانند webpack را تحت تأثیر قرار میدهد. این عمل باعث میشود که حتی اگر کامپوننتی استفاده نشده باشد، کدهای غیرضروری حذف نشوند.برای اعلام به webpack که این فراخوانی تابع باید کد های بی استفاده را حذف کند، میتوانید نشانه کامنت
/*#__PURE__*/
را قبل از فراخوانی تابع اضافه کنید:jsexport default /*#__PURE__*/ defineComponent(/* ... */)
اگر از Vite استفاده میکنید، نیازی به این کار نیست؛ چرا که Rollup (بستهبندی تولیدی اصلی که Vite از آن استفاده میکند) هوشمندانه تشخیص میدهد که
defineComponent()
در واقع بدون اثر جانبی است و نیازی به نشانهگذاری دستی ندارد.مشاهده بیشتر راهنما - استفاده از Vue با TypeScript
defineAsyncComponent()
تعریف یک کامپوننت ناهمگام که تنها زمانی بارگذاری(lazy load) میشود که رندر میشود. آرگومان میتواند یک تابع بارگذاری یا یک شیء از گزینه ها برای کنترل پیشرفتهتر رفتار بارگذاری باشد.
تایپ
tsfunction defineAsyncComponent( source: AsyncComponentLoader | AsyncComponentOptions ): Component type AsyncComponentLoader = () => Promise<Component> interface AsyncComponentOptions { loader: AsyncComponentLoader loadingComponent?: Component errorComponent?: Component delay?: number timeout?: number suspensible?: boolean onError?: ( error: Error, retry: () => void, fail: () => void, attempts: number ) => any }
مشاهده بیشتر راهنما - کامپوننت های ناهمگام