Skip to content

Commit 0230549

Browse files
Merge remote-tracking branch 'origin/upstream'
2 parents ced120d + a10d1cc commit 0230549

17 files changed

+66
-440
lines changed

.vitepress/config.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -190,10 +190,6 @@ export const sidebar: ThemeConfig['sidebar'] = {
190190
text: 'اتصال input در فرم',
191191
link: '/guide/essentials/forms'
192192
},
193-
{
194-
text: 'هوک‌های چرخه حیات',
195-
link: '/guide/essentials/lifecycle'
196-
},
197193
{ text: 'ناظرها - Watchers', link: '/guide/essentials/watchers' },
198194
{
199195
text: 'ارجاع از طریق تمپلیت - Template Refs',
@@ -202,6 +198,10 @@ export const sidebar: ThemeConfig['sidebar'] = {
202198
{
203199
text: 'مبانی کامپوننت‌ها',
204200
link: '/guide/essentials/component-basics'
201+
},
202+
{
203+
text: 'هوک‌های چرخه حیات',
204+
link: '/guide/essentials/lifecycle'
205205
}
206206
]
207207
},

.vitepress/theme/components/VueMasteryBanner.vue

-253
This file was deleted.

.vitepress/theme/index.ts

-2
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,12 @@ import SponsorsAside from './components/SponsorsAside.vue'
1212
import VueSchoolLink from './components/VueSchoolLink.vue'
1313
// import Banner from './components/Banner.vue'
1414
// import TextAd from './components/TextAd.vue'
15-
import VueMasteryBanner from './components/VueMasteryBanner.vue'
1615

1716
export default Object.assign({}, VPTheme, {
1817
Layout: () => {
1918
// @ts-ignore
2019
return h(VPTheme.Layout, null, {
2120
// banner: () => h(Banner),
22-
banner: () => h(VueMasteryBanner),
2321
'sidebar-top': () => h(PreferenceSwitch),
2422
'sidebar-bottom': () => h(SecurityUpdateBtn),
2523
'aside-mid': () => h(SponsorsAside)

src/guide/built-ins/teleport.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66

77
## استفاده پایه {#basic-usage}
88

9-
گاهی اوقات ممکن است به این وضعیت برخورد کنیم که یک بخش از تمپلیت یک کامپوننت از نظر منطقی به آن تعلق دارد، اما از نظر ظاهری باید در مکان دیگری در DOM نمایش داده شود، خارج از ساختار DOM برنامه.
9+
گاهی اوقات ممکن است به این وضعیت برخورد کنیم که یک بخش از تمپلیت یک کامپوننت از نظر منطقی به آن تعلق دارد، اما از نظر ظاهری باید در مکان دیگری در DOM نمایش داده شود، حتی خارج از ساختار DOM برنامه.
1010

11-
یکی از مثال‌های رایج این وضعیت زمانی است که یک مدال تمام صفحه ای ایجاد می‌کنیم. بهتر است دکمه مدال و خود مدال در داخل همان کامپوننت قرار داشته باشند، زیرا هر دو به وضعیت باز/بسته بودن مدال مرتبط هستند. اما این به این معناست که مدال به همراه دکمه در سلسله مراتب DOM برنامه نمایش داده می‌شود و در نتیجه ممکن است موقعیت دهی مدال با استفاده از CSS مشکل‌ساز شود.
11+
یکی از مثال‌های رایج این وضعیت زمانی است که یک مُدال تمام صفحه ای ایجاد می‌کنیم. بهتر است کد دکمه مدال و خود مدال در داخل همان کامپوننت قرار داشته باشند، زیرا هر دو به وضعیت باز/بسته بودن مدال مرتبط هستند. اما این به این معناست که مدال به همراه دکمه در سلسله مراتب DOM برنامه نمایش داده می‌شود و در نتیجه ممکن است موقعیت دهی مدال با استفاده از CSS مشکل‌ساز شود.
1212

1313
ساختار HTML زیر را در نظر بگیرید.
1414

@@ -169,11 +169,11 @@ const open = ref(false)
169169
</Teleport>
170170
```
171171

172-
که وضعیت `isMobile` می‌تواند با تشخیص تغییرات در media query به صورت پویا به‌روزرسانی شود.
172+
سپس می‌توانیم به صورت پویا `isMobile` را به روز کنیم.
173173

174174
## چندین تلپورت بر روی یک هدف {#multiple-teleports-on-the-same-target}
175175

176-
یک مورد رایج می‌تواند شامل کامپوننت `<Modal>` باشد که امکان فعال شدن همزمان چندین نمونه را فراهم می‌کند. در این نوع سناریو، چندین کامپوننت `<Teleport>` می‌توانند محتوای خود را به همان عنصر هدف منتقل کنند. ترتیب اضافه کردن المان‌ها، به ترتیب انتقال‌دهی خواهد بود، به این معنا که المان‌های بعدی پس از المان‌های انتقالی اولیه در داخل عنصر هدف قرار می‌گیرند.
176+
یک مورد رایج می‌تواند شامل کامپوننت `<Modal>` باشد که امکان فعال شدن همزمان چندین نمونه را فراهم می‌کند. در این نوع سناریو، چندین کامپوننت `<Teleport>` می‌توانند محتوای خود را به همان عنصر هدف منتقل کنند. ترتیب اضافه کردن المان‌ها، به ترتیب انتقال‌دهی خواهد بود، به این معنا که المان‌های بعدی پس از المان‌های انتقالی اولیه در داخل عنصر هدف قرار می‌گیرند، اما همه در داخل همان عنصر هدف خواهند بود.
177177

178178
با توجه به موارد زیر:
179179

src/guide/components/registration.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -138,4 +138,4 @@ export default {
138138

139139
این روش پیشنهادی هنگام استفاده از SFCها و یا string templateها می‌باشد. اما همانطور که در [محدودیت‌های تجزیه تمپلیت در DOM](/guide/essentials/component-basics#in-dom-template-parsing-caveats) صبحت شد، تگ‌های PascalCase در in-DOM templates قابل استفاده نیستند.
140140

141-
خوشبختانه Vue از تبدیل تگ‌های kebab-case به کامپوننت‌های ثبت‌شده با PascalCase پشتیبانی می‌کند. این به این معناست که کامپوننت ثبت شده `MyComponents` می‌تواند در تمپلیت هم به شکل `<MyComponent>` و هم به شکل `<my-component>` رفرنس داده شود. این قابلیت به ما اجازه می‌دهد تا همان ثبت کردن کامپوننت در جاوااسکریپت را بدون در نظر گرفتن نحوه نوشتن آن در تمپلیت استفاده کنیم.
141+
خوشبختانه Vue از تبدیل تگ‌های kebab-case به کامپوننت‌های ثبت‌شده با PascalCase پشتیبانی می‌کند. این به این معناست که کامپوننت ثبت شده `MyComponents` می‌تواند در تمپلیت Vue (یا داخل یک عنصر HTML ارائه شده توسط Vue) هم به شکل `<MyComponent>` و هم به شکل `<my-component>` رفرنس داده شود. این قابلیت به ما اجازه می‌دهد تا همان ثبت کردن کامپوننت در جاوااسکریپت را بدون در نظر گرفتن نحوه نوشتن آن در تمپلیت استفاده کنیم.

src/guide/components/slots.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ function BaseLayout(slots) {
303303
می‌توانید از پراپرتی [‎$slots](/api/component-instance.html#slots) در ترکیب با [v-if](/guide/essentials/conditional.html#v-if) برای رسیدن به این هدف استفاده کنید.
304304

305305
در مثال زیر یک کامپوننت کارت را با سه اسلات شرطی تعریف می‌کنیم: `header` و `footer` و یک `default`.
306-
زمانی که header / footer / default حضور داشته باشد، می‌خواهیم آنها را با یک المنت جدا بپیچیم تا استایل اضافی اعمال شود:
306+
زمانی که محتوا برای header / footer / default حضور داشته باشد، می‌خواهیم آنها را با یک المنت جدا بپیچیم تا استایل اضافی اعمال شود:
307307

308308
```vue-html
309309
<template>

src/guide/essentials/conditional.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,8 @@ const awesome = ref(true)
110110

111111
## `v-if` با `v-for` {#v-if-with-v-for}
112112

113+
وقتی که `v-if` و `v-for` هر دو روی یک عنصر استفاده شوند، ابتدا `v-if` ارزیابی می‌شود. برای جزئیات بیشتر، به [رندر لیست](list#v-for-with-v-if) مراجعه کنید.
114+
113115
::: warning توجه داشته باشید
114-
استفاده از `v-if` و `v-for` روی یک عنصر به دلیل اولویت ضمنی، **توصیه نمی‌شود**. برای جزئیات به [style guide](/style-guide/rules-essential#avoid-v-if-with-v-for) مراجعه کنید.
116+
استفاده از `v-if` و `v-for` روی یک عنصر به دلیل اولویت ضمنی، **توصیه نمی‌شود**. برای جزئیات به [رندر لیست](list#v-for-with-v-if) مراجعه کنید.
115117
:::
116-
117-
زمانی که `v-if` و `v-for` هر دو روی یک عنصر استفاده می‌شوند، ابتدا `v-if` ارزیابی می‌شود. برای جزئیات به [list rendering guide](list#v-for-with-v-if) مراجعه کنید.

src/guide/essentials/list.md

+11-5
Original file line numberDiff line numberDiff line change
@@ -223,10 +223,6 @@ data() {
223223

224224
## `v-if` با `v-for` {#v-for-with-v-if}
225225

226-
::: warning توجه داشته باشید
227-
استفاده از `v-if` و `v-for` روی یک عنصر به دلیل اولویت ضمنی، **توصیه نمی‌شود**. برای جزئیات به [style guide](/style-guide/rules-essential#avoid-v-if-with-v-for) مراجعه کنید.
228-
:::
229-
230226
وقتی هر دو روی یک نود وجود داشته باشند، `v-if` اولویت بالاتری نسبت به `v-for` دارد. این بدان معناست که شرط `v-if` دسترسی به متغیرهای درون اِسکوپ `v-for` نخواهد داشت:
231227

232228
```vue-html
@@ -249,6 +245,16 @@ data() {
249245
</template>
250246
```
251247

248+
:::warning هشدار
249+
استفاده از `v-if` و `v-for` روی یک عنصر به دلیل اولویت ضمنی **توصیه نمی‌شود**.
250+
251+
دو مورد رایج وجود دارد که ممکن است وسوسه شوید این کار را انجام دهید:
252+
253+
- **فیلتر کردن آیتم‌ها در یک لیست** (مانند `v-for="user in users" v-if="user.isActive"‎`). در این موارد، `users` را با یک پراپرتی computed جدید جایگزین کنید که لیست فیلترشده شما را برمی‌گرداند (مثلاً `activeUsers`).
254+
255+
- **اجتناب از رندر یک لیست در صورتی که نباید نمایش داده شود** (مانند `v-for="user in users" v-if="shouldShowUsers"‎`). در این موارد، `v-if` را به یک عنصر کانتینر بالاتر منتقل کنید (مانند `ul` یا `ol`).
256+
:::
257+
252258
## حفظ وضعیت با `key` {#maintaining-state-with-key}
253259

254260
وقتی Vue لیستی از المان‌های رندرشده با `v-for` را به‌روزرسانی می‌کند، به طور پیش‌فرض از استراتژی پچ در محل (in-place patch) استفاده می‌کند. اگر ترتیب آیتم‌های داده تغییر کرده باشد، به جای جابجایی المان‌های DOM برای مطابقت با ترتیب آیتم‌ها، Vue هر المان را د رجای قبلی خود اصلاح می‌کند و مطمئن می‌شود که محتوای رندرشده در آن اندیس خاص درست است.
@@ -275,7 +281,7 @@ data() {
275281
`key` اینجا یک خاصیت ویژه‌ای است که با `v-bind` پیاده سازی شده است. نباید آن را با متغیر کلیدی key هنگام [استفاده از v-for با یک آبجکت](#v-for-with-an-object) اشتباه بگیرید.
276282
:::
277283

278-
[توصیه می‌شود](/style-guide/rules-essential#use-keyed-v-for) هر جا امکان دارد یک خاصیت `key` با `v-for` ارائه دهید، مگر اینکه محتوای DOM تکرارشونده ساده باشد (هیچ اجزاء یا المان‌های DOM حاوی state نباشد) یا عمداً برای افزایش عملکرد به رفتار پیش فرض تکیه می کنید. (مترجم:‌ همه جا از `key` استفاده کنید چون از آینده خبر ندارید و نمی‌دونید چه بلایی قراره سر کدی که شما نوشتید بیاد 😃)
284+
توصیه می‌شود هر جا امکان دارد یک خاصیت `key` با `v-for` ارائه دهید، مگر اینکه محتوای DOM تکرارشونده ساده باشد (هیچ کامپوننت یا المان‌های DOM حاوی state نباشد) یا عمداً برای افزایش عملکرد به رفتار پیش فرض تکیه می کنید. (مترجم:‌ همه جا از `key` استفاده کنید چون از آینده خبر ندارید و نمی‌دونید چه بلایی قراره سر کدی که شما نوشتید بیاد 😃)
279285

280286
خاصیت `key` مقادیر اولیه - یعنی رشته‌ها و اعداد - را انتظار دارد. از آبجکت‌ها به عنوان کلید `v-for` استفاده نکنید. برای استفاده جزئی از خاصیت `key` لطفا به [مستندات API key](/api/built-in-special-attributes#key) مراجعه کنید. (مترجم: از `index` درون `v-for` به عنوان `key` استفاده نکنید)
281287

src/guide/essentials/template-refs.md

+2
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,8 @@ defineExpose({
314314

315315
هنگامی که والد نمونه‌ای از این کامپوننت را از طریق ارجاع تمپلیت می‌گیرد، نمونه بازیابی شده به شکل `{ a: number, b: number }` خواهد بود (refها همانند نمونه‌های معمولی به صورت خودکار unwrap می‌شوند)
316316

317+
توجه داشته باشید که `defineExpose` باید قبل از هر عملیات `await` فراخوانی شود. در غیر این صورت، ویژگی‌ها و متدهایی که پس از عملیات `await` مشخص می‌شوند، قابل دسترسی نخواهند بود.
318+
317319
همچنین ببینید: [Typing Component Template Refs](/guide/typescript/composition-api#typing-component-template-refs) <sup class="vt-badge ts" />
318320

319321
</div>

0 commit comments

Comments
 (0)