4. Общие правила
4.1. Пакетный менеджер (npm, yarn, pnpm)
❗В проекте должен быть только 1 пакетный менеджер
4.2. Переменные (const, let, var) (opens in a new tab)
- Для объявления переменных всегда используйте
constилиlet. - По умолчанию используйте
const, если только переменную не нужно переназначить. - ❗Никогда не используйте
var.
4.3. Аргументы функции
❗ Избегайте большого количества аргументов. Если больше 2-х аргументов, то объединяем их в объект
// ❌
const createTodolist1 = (id: string, title: string, author: string) => {
// code
}
// ✅
const createTodolist2 = (todo: Todo) => {
const { id, title, author } = todo
// code
}4.4. Утилитные функции (utils, helpers)
- Если утилитная функция используется во многих местах проектах, то выносим ее в
common/utils - Если функция необходима чтобы не замогрождать логику компонента, то кладем ее рядом с компонентой / фичей (в зависимости от структуры папок в приложении)
- Желательно покрывать логику утилит тестами
4.5. Утилитные функции, кастомные хуки и т.д. дробим на несколько файлов, т.е. не создаем файл utils куда все складываем
utils.ts
// ❌
export const handleServerAppError = () => {}
export const handleServerNetworkError = () => {}handleServerAppError.ts
// ✅
export const handleServerAppError = () => {}handleServerNetworkError.ts
// ✅
export const handleServerNetworkError = () => {}4.6. Однострочный метод
⚡ Однострочный метод должен выглядеть так же как и обычный метод
Когда в теле функции несколько строк кода, тогда все однозначно. Пишем вот так
if (a> 10) {
// code 1
// code 2
// code 3
}Разногласия возникают, когда в теле функции одна строка кода. Смотри примеры ниже
example1
// ❌
if (a>10) code 1
// ✅
if (a>10) {
// code 1
}example2
// ❌
const deletedTodosArray = produce(todosArray, draft => {
const index = draft.findIndex(todo => todo.id === "id1")
if (index !== -1) draft.splice(index, 1)
})
// ✅
const deletedTodosArray = produce(todosArray, draft => {
const index = draft.findIndex(todo => todo.id === "id1")
if (index !== -1) {
draft.splice(index, 1)
}
})