قوانین اولویت C : پیشنهاد شده
زمانی که که انتخابهای متعدد و به یک اندازه خوب وجود دارد، میتوان برای حفظ ثبات، یک انتخاب دلخواه انجام داد. در این قوانین، ما هر یک از انتخابهای قابل قبول را شرح داده و یک انتخاب پیشفرض را پیشنهاد میدهیم. این به این معنا است که شما آزاد هستید تا انتخابهای متفاوتی در کدهای خودتان داشته باشید، تا زمانی که در آنها ثابت هستید و برایشان دلیل معقولی دارید. لطفا دلیل معقول و منطبق با کامیونیتی خود داشته باشید. با منطبق شدن با استاندارد های کامیونیتی شما:
- ذهن خود را آموزش میدهید تا بسیاری از کدهای کامیونیتی که با آنها مواجه میشوید را تجزیه و تحلیل کنید.
- قادر خواهید بود بیشتر کدهای کامیونیتی را بدون تغییر دادن، کپی و پیست کنید.
- غالباً میبینید کارمندان جدید استخدام شده، دست کم در مورد Vue، از قبل به سبک کدنویسی مورد علاقه شما عادت کردهاند.
ترتیب آپشنهای کامپوننت/نمونه
آپشنهای کامپوننت/نمونه باید همیشه به طور ثابت مرتب شوند.
این ترتیب پیشفرضی است که ما برای آپشنهای کامپوننت پیشنهاد میدهیم. آنها به دستههایی تقسیم میشوند تا بدانید در کجا پراپرتیهای جدید را از طریق افزونهها اضافه کنید.
Global Awareness (نیاز به دانشی فراتر از کامپوننت دارد)
name
Template Compiler Options (روشی که تمپلیتها کامپایل میشوند را تغییر میدهد)
compilerOptions
Template Dependencies (فایلهایی که در تمپلیت استفاده شده است)
components
directives
Composition (پراپرتیها را با آپشنها ادغام میکند)
extends
mixins
provide
/inject
Interface (رابط کامپوننت)
inheritAttrs
props
emits
Composition API (نقطه ورود برای استفاده از Composition API)
setup
Local State (پراپرتیهای محلیِ reactive)
data
computed
Events (تماسهای بازگشتی که به واسطه رویدادهای reactive ایجاد میشوند)
watch
- رویدادهای چرخه ی حیات (به ترتیبی که فراخوان میشوند)
beforeCreate
created
beforeMount
mounted
beforeUpdate
updated
activated
deactivated
beforeUnmount
unmounted
errorCaptured
renderTracked
renderTriggered
Non-Reactive Properties (پراپرتیهای نمونه مستقل از سیستم reactivity)
methods
Rendering (توضیحاتِ اخباریِ خروجیِ کامپوننت)
template
/render
ترتیب صفات المانها
صفات المانها (از جمله کامپوننت ها)، باید همیشه به طور ثابت مرتب شوند.
این ترتیب پیشفرضی است که ما برای آپشنهای کامپوننت پیشنهاد میدهیم. آنها به دستههایی تقسیم میشوند تا بدانید در کجا از صفات و دایرکتیوهای شخصی سازی شده استفاده کنید.
Definition (آپشنهای کامپوننت را فراهم میکند)
is
List Rendering (نسخههای متفاوتی از یک المان میسازد)
v-for
Conditionals (رندر/نمایش داده شدن یا نشدن یک المان را تعیین میکند)
v-if
v-else-if
v-else
v-show
v-cloak
Render Modifiers (نحوه رندر شدن المان را تغییر میدهد)
v-pre
v-once
Global Awareness (نیاز به دانشی فراتر از کامپوننت دارد)
id
Unique Attributes (صفاتی که به مقادیر منحصر به فرد نیاز دارد)
ref
key
Two-Way Binding (ترکیب اتصال و رویدادها)
v-model
Other Attributes (تمام صفاتِ مشخص نشدهِ محدود شده و محدود نشده)
Events (دریافت کنندههای رویدادهای کامپوننت)
v-on
Content (محتوای المان را بازنویسی میکند)
v-html
v-text
خطوط خالی در آپشن های کامپوننت/نمونه
شاید بخواهید یک خط خالی بین پراپرتیهای چندخطی اضافه کنید، به ویژه اگر آپشنها دیگر بدون اسکرول کردن نمیتوانند در صفحه شما جا بگیرند.
زمانی که احساس میکنید کامپوننتها شلوغ یا به سختی خوانده میشوند، اضافه کردن فاصله بین پراپرتیهای چندخطی میتواند باعث شود دوباره بتوان به راحتی آنها را مرور کرد. در برخی ویرایشگرها مانند Vim، گزینههای قالببندی مثل این میتواند باعث شود حرکت بین آنها با صفحهکلید راحتتر باشد.
بد
js
defineProps({
value: {
type: String,
required: true
},
focused: {
type: Boolean,
default: false
},
label: String,
icon: String
})
const formattedValue = computed(() => {
// ...
})
const inputClasses = computed(() => {
// ...
})
خوب
js
defineProps({
value: {
type: String,
required: true
},
focused: {
type: Boolean,
default: false
},
label: String,
icon: String
})
const formattedValue = computed(() => {
// ...
})
const inputClasses = computed(() => {
// ...
})
ترتیب المانهای مرتبه اول در کامپوننتهای تک فایلی
کامپوننتهای تک فایلی باید تگهای <script>
و <template>
و <style>
را ثابت و به طوری که تگ <style>
در آخر باشد مرتب کنند. زیرا حداقل یکی از دو تگ دیگر همیشه لازم است.
بد
template
<style>/* ... */</style>
<script>/* ... */</script>
<template>...</template>
template
<!-- ComponentA.vue -->
<script>/* ... */</script>
<template>...</template>
<style>/* ... */</style>
<!-- ComponentB.vue -->
<template>...</template>
<script>/* ... */</script>
<style>/* ... */</style>
خوب
template
<!-- ComponentA.vue -->
<script>/* ... */</script>
<template>...</template>
<style>/* ... */</style>
<!-- ComponentB.vue -->
<script>/* ... */</script>
<template>...</template>
<style>/* ... */</style>
template
<!-- ComponentA.vue -->
<template>...</template>
<script>/* ... */</script>
<style>/* ... */</style>
<!-- ComponentB.vue -->
<template>...</template>
<script>/* ... */</script>
<style>/* ... */</style>