第1部分:命名约定 - 清洁代码的基础
#javascript #react #bestpractices #namingconventions

欢迎进入我博客系列的第一部分“ 2023年的最佳实践。” 在此博客中,我们将深入研究命名惯例的关键主题和它们如何作为React中清洁和可维护的代码的基础。

命名惯例在改善代码可读性可维护性组织 Communication 中起着至关重要的作用。它们有助于创建一个更易于使用的有凝聚力和结构化的代码库,减少错误,并在开发人员中促进协作

在这一部分中,我们将专门关注React中的命名惯例。我们将探讨您的React项目中命名组件,变量,功能和其他标识符的建议方法。您将获得有关 pascalcase Camelcase kebab-case screaming_snake_case 和了解何时何地应用它们。

我们还将讨论有意义的描述性名称的好处,这些名称准确地反映了代码中元素的目的和功能。

帕斯卡案

pascal案例通常是指每个单词的首字母大写 的惯例,并且单词之间没有空间或标点符号。

在React中,我们可以使用pascal案例作为以下元素:

1。反应组件

// React Component
const Todo = () => {
   //...
}

2。 CSS班级名称

// CSS Class Names
Todo.css
Todo.scss
Todo.module.scss

3。枚举

// Enums
const RequestType = {
   //...
}

骆驼香烟盒

骆驼案是指编写化合物单词或短语的惯例,其中每个单词以大写字母开头,但第一个单词以小写字母开头。

在React中,我们可以使用骆驼盒作为以下元素:

1。可变名称

// Variable Name
const userName = "sathishskdev";

2。功能名称

// 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 = () => {
  //...
}

烤肉串

烤肉案例是指小写字母中编写化合物的惯例,用连字符(“ - ”)将它们分开。

在React中,我们可以在以下元素中使用烤肉串案例:

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是指 uppercase Letters in 中编写复合单词或短语的惯例,词被Underscores (“ _”)。

1。常数

// Constants
const BASE_PATH = "https://domain.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。使用“与”作为前缀

共同的惯例是将前缀“与” ,其次是HOC的功能或目的。

2。使用“原始组件”作为后缀

在事务所的名称中包含原始组件名称,以指示其增强或包装的组件

// 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*/);

自定义挂钩命名大会

这是命名自定义挂钩的最佳实践:

1。使用“使用”作为前缀

普通惯例是使用前缀“使用” 随后是自定义钩的功能或目的。

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);

使用更多描述性和特定名称

重要的是要避免使用通用不清楚的组件,变量或功能。

让我们以一个例子来说明这一点:

// ❌ 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”和函数名称“ onClick”是通用的, 不要传达其特定目的或上下文

为提高清晰度和可维护性,建议使用更多的描述性和特定名称。

这是一个最佳做法:

// ✅ Best Practice

const ProductDetails = () => {

const productInfo = fetchProductInfo();
// Fetches detailed product information

const addProductToCart = () => {
  // Add the product to the shopping cart
};
//...
}

在改进的示例中,该组件将其重命名为“ ProductDetails”,这清楚地表明了其目的。可变名称“ ProductInfo”传达了有关产品的详细信息。功能名称“ AddProductTocart”描述了将产品添加到购物车中的动作。

通过使用描述性和有意义的名称,从长远来看,其他开发人员(包括您自己)更容易理解和维护代码。

选择单数或复数命名

决定使用单数或复数名称作为各种元素,例如组件,变量和功能,可以显着影响代码清晰度

让我们以一个例子:

// ✅ 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*/ }
]

通过将组件,功能和可变名称的单数或复数形式及其预期目的对齐,我们提高了代码的可读性,并促进了在代码库上工作的其他开发人员的更好理解。

避免过多的缩写

这是一个示例,证明了避免代码中过度缩写的重要性:

// ❌ Bad example

// Excessive abbreviation
const selUsr = {
  usrId: '1',
  usrNm: 'Sathish Kumar',
  usrEmail: 'sathish@domain.com',
};

// Usage
selUsr.usrId

在上面的示例中,对象selUsr包含所选的用户信息,其中包含缩写的属性名称,例如usrIdusrNmusrEmail。尽管此代码可能起作用,但它缺乏清晰度,可能会使需要使用此对象和属性的其他开发人员引起混乱。

这是一个最佳做法:

// ✅ Best Practice

// Descriptive object and property names
const selectedUser = {
  userId: 1,
  userName: 'Sathish Kumar',
  userEmail: 'sathish@domain.com',
}

// Usage
selectedUser.userId

在此示例中,属性名称 userId 用户名用户邮件更具描述性,从而更清楚地了解了所使用的数据。这使得代码更容易阅读维护合作,从而有助于更好的总体代码质量。<<<<<<<<<<<<<< /p>

总结了我们对React.js中命名约定的探索。通过遵循这些最佳实践,您有能力创建清洁可读可维护代码。

记住,选择有意义的描述性对您的变量,函数,组件和其他元素的名称对于增强代码清晰度和改善开发人员之间的协作至关重要。整个项目的命名惯例的一致性将使您的代码库更有条理且易于理解。

在我们系列的下一部分中,我们将深入研究** react中的文件夹结构和组件结构**的关键主题。我们将讨论如何有效地组织项目的文件和目录,以及如何实现一种促进代码可重复性和可维护性的模块化方法。

请继续关注下一篇文章!

快乐的编码!