Media is too big
VIEW IN TELEGRAM
ویو 3.5.0 منتشر شد (ویدیو دوبله شده)
بهینه سازیهای زیادی در واکنشگرایی انجام شده است،
پشتیبانی از وب کامپوننتها بهبود یافته است،
امکان دیستراکچر کردن propsها اضافه شده است،
استفاده از Teleport به تعویق افتاده (defer) است، useTemplateRef()، app.onUnmount()، useId() و بسیاری از ویژگیها و رفع باگهای کوچک دیگر اضافه شدهاند.
🔗https://blog.vuejs.org/posts/vue-3-5
🔗 https://github.com/vuejs/core/blob/main/CHANGELOG.md
#️⃣#tip #dub #vue
👥@IR_javascript_group
🆔@IR_javascript
بهینه سازیهای زیادی در واکنشگرایی انجام شده است،
پشتیبانی از وب کامپوننتها بهبود یافته است،
امکان دیستراکچر کردن propsها اضافه شده است،
استفاده از Teleport به تعویق افتاده (defer) است، useTemplateRef()، app.onUnmount()، useId() و بسیاری از ویژگیها و رفع باگهای کوچک دیگر اضافه شدهاند.
🔗https://blog.vuejs.org/posts/vue-3-5
🔗 https://github.com/vuejs/core/blob/main/CHANGELOG.md
#️⃣#tip #dub #vue
👥@IR_javascript_group
🆔@IR_javascript
❤2
نمونهای از "نشت" استایلها در Vue 3 با استفاده از Scoped Styles
در این مثال، دو کامپوننت A.vue و B.vue هر دو از کلاسی با نام مشابه a استفاده میکنند. این مسئله حتی با وجود استفاده از scoped styles میتواند منجر به نشت استایلها شود.
برای مشاهده و تست این مسئله میتوانید از لینک زیر استفاده کنید
راهحل: نامگذاری معنایی کلاسها
برای جلوگیری از این نوع تداخلات، بهتر است نام کلاسها به گونهای انتخاب شوند که معنایی باشند و وابستگی آنها به کامپوننت مربوطه مشخص باشد.
🔗https://play.vuejs.org/#eNqdUj1PwzAQ/SvWzSgZYCoFKaAOMAACRi/GuQYXx7Z8Timq+t85O7S0AlWIKfH7sN7d8xqaEKrlgDCBKeloQhKEaQiX0pk++JhEI+bR90JCVTdZKeFcOumm9ShnIR8S9sGqhHyatmYptFVEFxJeJDAkxAGovkCGG1GPfM2CbN59927kI6UPi4K0D9gyUimxzjbtrY8T0UVEx6k2JVaWsgZOILHBzU1XLcg7nrB4JGjfB2Mx3odkvCMJk/G2zClr/fttwVIc8GSL61fUb7/gC1plTMJDRMK45PXsuKRih2mkZ093uOL/Hdn7drCsPkI+Ink75Iyj7GpwLcfe05W0N6Un47pnmq0SOtoOlYNm5aboJXB510dG/457Wp0VH2+Ut1ha//E+/tZ/rtoI1YuI7f+6ZeNhs7D5BMkN50M=
#️⃣#tip #vue
👥@IR_javascript_group
🆔@IR_javascript
<!-- A.vue -->
<div class="a" />
<!-- B.vue -->
<div class="b">
<div class="a">
<A /> <!-- اوه، مشکل! -->
</div>
</div>
در این مثال، دو کامپوننت A.vue و B.vue هر دو از کلاسی با نام مشابه a استفاده میکنند. این مسئله حتی با وجود استفاده از scoped styles میتواند منجر به نشت استایلها شود.
برای مشاهده و تست این مسئله میتوانید از لینک زیر استفاده کنید
راهحل: نامگذاری معنایی کلاسها
برای جلوگیری از این نوع تداخلات، بهتر است نام کلاسها به گونهای انتخاب شوند که معنایی باشند و وابستگی آنها به کامپوننت مربوطه مشخص باشد.
🔗https://play.vuejs.org/#eNqdUj1PwzAQ/SvWzSgZYCoFKaAOMAACRi/GuQYXx7Z8Timq+t85O7S0AlWIKfH7sN7d8xqaEKrlgDCBKeloQhKEaQiX0pk++JhEI+bR90JCVTdZKeFcOumm9ShnIR8S9sGqhHyatmYptFVEFxJeJDAkxAGovkCGG1GPfM2CbN59927kI6UPi4K0D9gyUimxzjbtrY8T0UVEx6k2JVaWsgZOILHBzU1XLcg7nrB4JGjfB2Mx3odkvCMJk/G2zClr/fttwVIc8GSL61fUb7/gC1plTMJDRMK45PXsuKRih2mkZ093uOL/Hdn7drCsPkI+Ink75Iyj7GpwLcfe05W0N6Un47pnmq0SOtoOlYNm5aboJXB510dG/457Wp0VH2+Ut1ha//E+/tZ/rtoI1YuI7f+6ZeNhs7D5BMkN50M=
#️⃣#tip #vue
👥@IR_javascript_group
🆔@IR_javascript
👍1
// useUserService.ts
function isAuthenticated() {
return !!user.value;
}
// کامپوننت A
<script>
const { isAuthenticated } = useUserService();
</script>
<template>
<p v-if="isAuthenticated()">سلام</p>
</template>
توابع در Vue رفتار متفاوتی از توابع معمولی دارند.
در این مثال، تابع
isAuthenticated()
مانند یک computed
عمل میکند و هر بار که مقدار user
تغییر کند یا کامپوننت A دوباره رندر شود، فراخوانی خواهد شد.این اتفاق به این دلیل میافتد که Vue تمام وابستگیهای واکنشپذیر را درون بدنهی تابع شناسایی کرده و هر زمان که یکی از آنها تغییر کند، کامپوننت را دوباره رندر میکند.
بنابراین، تفاوت زیادی در استفاده از یک تابع به جای
computed
وجود ندارد. اما اگر داخل تابع منطق پیچیدهتری وجود داشته باشد، بهتر است از computed
استفاده کنید، زیرا فقط زمانی که وابستگیهای آن تغییر کنند، محاسبه مجدد میشود، در حالی که تابع در هر رندر اجرا میشود.#️⃣#tip #vue
👥@IR_javascript_group
🆔@IR_javascript
❤1
اگر صفحهای را از طریق
از طریق watch:
از طریق هوک روتر
روش دوم این امکان را فراهم میآورد که از
#️⃣#tip #vue
👥@IR_javascript_group
🆔@IR_javascript
<router-view>
نمایش میدهید که شامل پارامترهای مسیری (مانند محصولات، کاتالوگها یا کاربران از طریق شناسه) است و باید در صورت تغییر پارامتر، اطلاعات جدیدی بارگذاری کنید، یعنی باید تغییرات پارامتر را پیگیری کنید، این کار را میتوان به دو روش انجام داد.از طریق watch:
watch(
() => route.params.id,
async () => {
userData.value = await fetchUser(to.params.id);
},
{ immediate: true }
);
از طریق هوک روتر
onBeforeRouteUpdate
:import { onBeforeRouteUpdate } from 'vue-router'
onBeforeRouteUpdate(async (to, from) => {
if (to.params.id !== from.params.id) {
userData.value = await fetchUser(to.params.id);
}
})
روش دوم این امکان را فراهم میآورد که از
onBeforeRouteLeave
نیز استفاده کنید، اگر به هر دلیلی نیاز باشد.#️⃣#tip #vue
👥@IR_javascript_group
🆔@IR_javascript
👍1