React命名約定 - 整潔代碼的基礎(chǔ)
我們將深入探討命名約定的關(guān)鍵主題,以及它們?nèi)绾巫鳛?React 中干凈且可維護的代碼的基礎(chǔ)。
命名約定在提高代碼可讀性、可維護性、組織和通信方面發(fā)揮著至關(guān)重要的作用。它們有助于創(chuàng)建一個有凝聚力和結(jié)構(gòu)化的代碼庫,該代碼庫更易于使用、減少錯誤并促進開發(fā)人員之間的協(xié)作。
在這一部分中,我們將特別關(guān)注 React 中的命名約定。我們將探索在 React 項目中命名組件、變量、函數(shù)和其他標識符的推薦方法。您將深入了解PascalCase、CamelCase、kebab-case和SCREAMING_SNAKE_CASE等流行約定,并了解何時何地應(yīng)用它們。
我們還將討論準確反映代碼中元素的用途和功能的有意義的描述性名稱的好處。
(更|多優(yōu)質(zhì)內(nèi)|容:java567 點 c0m)
### 帕斯卡案例
> 帕斯卡大小寫通常是指書寫復(fù)合詞的慣例,其中每個單詞的第一個字母大寫,并且單詞之間沒有空格或標點符號。
在 React 中,我們可以對以下元素使用帕斯卡大小寫:
1. 反應(yīng)組件
```
// React Component
const Todo = () => {
? ?//...
}
```
2.CSS類名
```
// CSS Class Names
Todo.css
Todo.scss
Todo.module.scss
```
3. 枚舉
```
// Enums
const RequestType = {
? ?//...
}
```
### 駱駝香煙盒
> 駝峰式大小寫是指書寫復(fù)合單詞或短語的慣例,其中每個單詞都以大寫字母開頭,第一個單詞以小寫字母開頭。
在 React 中,我們可以對以下元素使用駝峰式大小寫:
1. 變量名稱
```
// Variable Name
const userName = "sathishskdev";
```
2. 函數(shù)名稱
```
// Function Name
const getFullName = (firstName, lastName) => {
? ? return `${firstName} ${lastName}`;
}
```
3. 對象屬性
```
// Object Properties
const user = {
? userName: "sathishskdev",
? firstName: "Sathish",
? lastName: "Kumar"
}
```
4.CSS模塊類名
```
// CSS Module Class Names
.headerContainer {
? ? display: "flex";
}
```
5. 自定義掛鉤
```
const useTodo = () => {
? //...
}
```
6. 高階組件
```
const withTimer = () => {
? //...
}
```
### 烤肉串盒
> Kebab 大小寫是指用小寫字母書寫復(fù)合詞并用連字符(“-”)分隔的約定。
在 React 中,我們可以對以下元素使用 kebab case:
1.CSS類名
```
// CSS Class Names
header-container {
? ? display: "flex";
}
<div className="header-container">
? //...
</div>
```
2. 文件夾名稱
```
// Folder Names
? src
? ? ?todo-list // Folder name
? ? ? ? ?TodoList.jsx
? ? ? ? ?TodoList.module.scss
? ? ?todo-item // Folder name
? ? ? ? ?TodoItem.jsx
```
### SCREAMING_SNAKE_CASE
> SCREAMING_SNAKE_CASE 指的是用大寫字母書寫復(fù)合單詞或短語的約定,單詞之間用下劃線(“_”)分隔。
1. 常量
```
// Constants
const BASE_PATH = "/services/api";
```
2. 枚舉屬性
```
// Enumeration Properties
const RequestType = { // Name in Pascal Case
? // Properties in Screaming Snake Case
? GET: 'GET',
? POST: 'POST',
? PUT: 'PUT',
? DELETE: 'DELETE',
};
```
3. 全局變量
```
// Global Variables
const ENVIRONMENT = 'PRODUCTION';
const PI = 3.14159;
```
### 高階組件命名約定
以下是命名高階組件的最佳實踐:
1.使用“with”作為前綴
常見約定是使用前綴“with”,后跟 HOC 的功能或用途。
2.使用“原始組件”作為后綴
在 HOC 名稱中包含原始組件名稱,以指示它正在增強或包裝的組件
```
// HOC: name have "with" as Prefix
// "Filter" is add as Suffix which is original component
const withFilter = () => {
?//...
}
// Usage of the HOC
const Filter = withFilter(/*Component Name*/);
```
### 自定義 Hook 命名約定
以下是命名自定義掛鉤的最佳實踐:
1.使用“use”作為前綴
常見約定是使用前綴“use”,后跟自定義 Hook 的功能或用途。
2.使用“鉤子的行為”作為后綴
命名準確描述自定義鉤子的目的或行為的自定義鉤子。
```
// Custom Hook: useTimer
// name have "use" as Prefix
// "Timer" is add as Suffix which is behaviour of hook
const useTimer = (initialTime) => {
? // ... hook implementation
};
// Usage of the custom hook
? const { time, start, stop, reset } = useTimer(60);
```
### 使用更具描述性和具體的名稱
避免對組件、變量或函數(shù)使用通用或不明確的名稱非常重要。
讓我們舉個例子來說明這一點:
```
// ? Pitfalls to Avoid
const MyComponent = () => {?
// What kind of component is this?
const data = getData()?
// What kind of data is this?
const onClick = () => {
? // What does it do?
}
//...
}
```
在上面的示例中,組件名稱、變量名稱“data”和函數(shù)名稱“onClick”是通用的,不傳達它們的特定用途或上下文。
為了提高清晰度和可維護性,建議使用更具描述性和具體的名稱。
這是一個最佳實踐:
```
// ? Best Practice
const ProductDetails = () => {
const productInfo = fetchProductInfo();
// Fetches detailed product information
const addProductToCart = () => {
? // Add the product to the shopping cart
};
//...
}
```
在改進的示例中,該組件被重命名為“ProductDetails”,這清楚地表明了其用途。變量名稱“productInfo”表明它保存有關(guān)產(chǎn)品的詳細信息。函數(shù)名稱“addProductToCart”描述了將產(chǎn)品添加到購物車的操作。
從長遠來看,通過使用描述性且有意義的名稱,其他開發(fā)人員(包括您自己)可以更輕松地理解和維護代碼。
### 選擇單數(shù)或復(fù)數(shù)命名
決定對各種元素(例如組件、變量和函數(shù))使用單數(shù)或復(fù)數(shù)名稱可能會顯著影響代碼的清晰度。
讓我們舉個例子:
```
// ? Best Practice
const fetchConversation = () => {
? // Fetch single conversation.
}
const fetchConversations = () => {
? // Fetch multiple conversations.
}
// Use singular name for a single conversation
const conversation = { /*Conversation Details*/ }
// Use plural name for multiple conversation
const conversations = [
? { /*Conversation Details*/ },?
? { /*Conversation Details*/ }
]
```
通過將組件、函數(shù)和變量名稱的單數(shù)或復(fù)數(shù)形式與其預(yù)期目的保持一致,我們提高了代碼的可讀性,并有助于其他開發(fā)代碼庫的開發(fā)人員更好地理解。
### 避免過多縮寫
下面的示例演示了避免在代碼中使用過多縮寫的重要性:
```
// ? Bad example
// Excessive abbreviation
const selUsr = {
? usrId: '1',
? usrNm: 'Sathish Kumar',
? usrEmail: 'sathish@domain.com',
};
// Usage
selUsr.usrId
```
在上面的示例中,對象selUsr包含選定的用戶信息以及縮寫屬性名稱usrId,例如usrNm、 和usrEmail。雖然此代碼可能有效,但它缺乏清晰度,可能會給需要使用此對象和屬性的其他開發(fā)人員造成混亂。
這是一個最佳實踐:
```
// ? Best Practice
// Descriptive object and property names
const selectedUser = {
? userId: 1,
? userName: 'Sathish Kumar',
? userEmail: 'sathish@domain.com',
}
// Usage
selectedUser.userId
```
在此示例中,屬性名稱userId、userName和userEmail更具描述性,可以更清楚地了解所使用的數(shù)據(jù)。這使得代碼更易于閱讀、維護和協(xié)作,從而有助于提高整體代碼質(zhì)量。
我們對 React.js 中命名約定的探索到此結(jié)束。通過遵循這些最佳實踐,您就可以在 React 項目中創(chuàng)建干凈、可讀且可維護的代碼。
請記住,為變量、函數(shù)、組件和其他元素選擇有意義且具有描述性的名稱對于提高代碼清晰度和改善開發(fā)人員之間的協(xié)作至關(guān)重要。整個項目中命名約定的一致性將使您的代碼庫更有條理且更易于理解。
在本系列的下一部分中,我們將深入研究React 中文件夾結(jié)構(gòu)的關(guān)鍵主題。我們將討論如何有效地組織項目的文件和目錄,以及如何實現(xiàn)提高代碼可重用性和可維護性的模塊化方法。
請繼續(xù)關(guān)注下一篇文章!
快樂編碼!????????????
(更|多優(yōu)質(zhì)內(nèi)|容:java567 點 c0m)