Код-стайл
Пишите код так, чтобы он был более структурированным и читаемым.
Имена каталогов должны быть написаны строчными буквами и разделены дефисами.
Например: каталог с именем form-item
, а не FormItem
.
Каждый компонент должен иметь файл index.ts
в качестве точки входа, который экспортирует все содержимое компонента.
Пример содержимого файла index.tsx
для компонента form-item
:
export * from './src/hoc';
export * from './src/utils';
export * from './src/components';
export * from './src/createSuperFormItem';
Рекомендуется сортировать экспортируемые элементы по длине, чтобы код выглядел аккуратно.
Компоненты React должны использовать стиль именования CamelCase.
Например, компонент Color.tsx
.
Компонентам не следует добавлять префикс «Super».
Например, вместо SuperCheckbox.tsx
следует использовать Checkbox.tsx
.
Префикс «Super» должен использоваться для компонентов.
Например, Checkbox.tsx
соответствует компоненту SuperCheckbox
.
Для не-React компонентов следует использовать стиль именования snake_case.
Например, util.ts
или useAxios.ts
.
Тип компонента React должен быть определен как компонент_имяProps
.
Например, для компонента SuperCheckbox
тип должен быть SuperCheckboxProps
.
Функции экспорта: максимум 2 аргумента, остальные помещаются в объект опций (options object). При разработке интерфейса функции следуйте следующим правилам:
Пример неправильного использования необязательных аргументов:
// Ошибка: слишком много аргументов (#1), несколько необязательных аргументов (#2).
export function renameSync(oldName: string, newName: string, replaceExisting?: boolean, followLinks?: boolean) {}
Пример правильного использования:
interface RenameOptions {
replaceExisting?: boolean;
followLinks?: boolean;
}
export function renameSync(oldName: string, newName: string, options: RenameOptions = {}) {}
import { Btns } from '@/btns'; // правильно
import { Btns } from 'super-antd'; // неправильно
import { Btns } from '../btns'; // правильно
/** Так пишется однострочный комментарий JSDoc. */
export function foo() {
// ...
}
Не пишите так:
/** Не следует так писать однострочный комментарий JSDoc. */
Строковые литералы кода должны быть заключены в обратные кавычки (`), а не в кавычки. Например:
/** Импортируем что-то из super-antd. */
Используйте @param
, поскольку TypeScript уже является строго типизированным.
/**
* Функция с неочевидным параметром.
*
* @param foo Описание неочевидного параметра.
*/
Комментарии к примерам кода должны отделяться пустой строкой, а каждая строка примера должна иметь 6 дополнительных пробелов. Это на 4 пробела больше, чем в первой колонке комментария. Пример:
/**
* Простой комментарий и пример:
*
* import { useAxios } from 'super-antd';
* const { loading } = useAxios({ api });
*/
Поскольку пример кода уже является комментарием, он не должен содержать других комментариев. Если ему требуется дальнейшее комментирование, это означает, что он не является хорошим примером.
src
btns
Btns.tsx
# Соответствующий тестовый файл должен называться
tests
btns
Btns.test.tsx
code
для включения примеров компонентов, поэтому не рекомендуется включать примеры в Markdown.
Каждая статья должна иметь соответствующую папку, например:form.md
select.md
# Их файлы примеров соответствуют папкам того же уровня
__demos__
form
hideLabel.tsx
api_basic.tsx
Имя файла должно отражать основную функцию, например, hideLabel
для свойства hideLabel
, и api_basic
для основного использования свойства api
.
Вместо этого не следует делать следующее:
❌
__demos__
form
demo1.tsx
demo2.tsx
XxxProps
используется для свойств React-компонентов.XxxxOptions
используется для параметров функций.XxxxType
используется в других случаях.interface SuperFormProps {
// ...
}
const SuperForm: FC<SuperFormProps> = () => {};
interface GetBtnsOptions {}
function getBtns(options: GetBtnsOptions) {}
export type AlignType = 'left' | 'right' | 'center'; // В других случаях используется XxxType
interface SuperBtnsProps {
align: AlignType;
}
Обратите внимание, что если у компонента есть несколько частей, то другие части также должны быть определены с помощью XxxProps
.
interface SuperFormItemInjectProps {}
interface SuperFormItemOverwriteProps {}
interface SuperFormItemProps extends SuperFormItemInjectProps, SuperFormItemOverwriteProps {}
Используйте useCreation вместо useMemo. Подробнее см. в документации по useCreation.
Экспортируйте собственные Props для каждого компонента, чтобы другие могли их использовать в своих обёртках.
Если содержимое компонента не может быть размещено в одном файле, создайте каталог src. Например, для компонента provider:
provider
index.ts # Используется для экспорта всего
src
Provider.tsx # должен быть одноимённый
context.ts
export default
, также требуется export
export const foo = 123; // даже если это export default, также требуется export
export default foo;
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )