Лучшие практики экспорта стандартных функций в React с TypeScript

Вопрос или проблема

В настоящее время я изучаю React с TypeScript и столкнулся с двумя разными способами экспорта функции-компонента по умолчанию. Вот два примера:

  1. Отдельный экспорт функции:
function PriceListPage() {
    return (<></>);
}

export default PriceListPage;
  1. Экспорт функции напрямую во время объявления:
export default function PriceListPage() {
    return (<></>);
}

Оба варианта, похоже, работают одинаково, и я не заметил никаких технических различий в поведении.

У меня есть вопросы:

  • Существуют ли какие-либо технические различия между этими двумя подходами?
  • Есть ли какие-либо лучшие практики, соглашения или рекомендации от сообщества React или TypeScript, которые предпочтительнее для одного стиля перед другим?

Я являюсь Full Stack Software Engineer нового предстоящего большого проекта на одном экране и решил использовать React с TypeScript. В рамках настройки стилизации кода с лучшими практиками, я хотел бы знать, есть ли также какие-либо практические различия между этими стилями, и следует ли отдавать предпочтение одному из них с точки зрения поддерживаемости.

Буду признателен за любыеInsights о том, какой метод более часто используется или почему один может быть предпочтительнее!

Между двумя подходами нет технических различий.

Что касается лучших практик, это зависит от соглашений вашей команды, но я думаю, что типично лучшее решение — вообще не использовать экспорты по умолчанию, а вместо этого использовать

export function PriceListPage() {
    return (<></>);
}

Проблема с экспортами по умолчанию заключается в том, что их слишком легко переименовать, что делает код более трудным для понимания, если один и тот же компонент называется по-разному в разных файлах. Именованные экспорты тоже можно переименовать при необходимости, но, по крайней мере, строка импорта гораздо более явно указывает на переименование, поэтому это труднее сделать случайно.

Между экспортами по умолчанию и именованными экспортами нет скрытых абстракций или технических различий.

Преимущества именованных экспортов:

  1. Именованные экспорты полезны, когда вам необходимо экспортировать несколько переменных,
    функций, утилит, компонентов, выражений.

  2. Мы можем использовать одинаковое наименование компонентов, когда мы их импортируем. При импорте этого модуля именованные экспорты должны быть указаны точно так же (по желанию можно переименовать с помощью as).

"HomeComponents.jsx";

export function PriceListPage() {
 return (<></>);
}

export function FavouriteListPage(){
 return (<> </>);
}
export function CommentsListPage(){
 return (<> </>);
}

"HomePage.jsx";

import {PriceListPage,FavouriteListPage,CommentsListPage } from "HomeComponents.jsx";

export function HomePage(){

 return (
         <PriceListPage/>
         <CommentsListPage/>
         <FavouriteListPage/>
 )}

Преимущества экспорта по умолчанию:

  1. Экспорты по умолчанию могут быть импортированы с любым именем.
  2. Экспорты по умолчанию идеальны, когда модуль экспортирует единую сущность.
  3. С именованными экспортами вам всегда нужно использовать фигурные скобки и убедиться, что вы точно соответствуете имени. В отличие от этого, экспорты по умолчанию позволяют избежать этого, упрощая строку импорта.

Когда использовать экспорты по умолчанию:

  • Когда файл или модуль сосредоточен вокруг единственного компонента или функции.
  • Когда конкретное название импорта не так важно.
  • Когда гибкость в именовании при импортах полезна.
import App from './App'; // Проще, не нужны фигурные скобки

export default function OldName() { ... }

// Импорт в другом файле
import NewName from './OldName'; // Не нужно переименовывать внутреннюю функцию

Ссылки: Подробнее о импортировании и экспортировании

Ответ или решение

Вопрос об экспорте функций по умолчанию в React с использованием TypeScript действительно важен для обеспечения качественного и поддерживаемого кода в вашем проекте. Давайте рассмотрим ваши запросы более подробно.

1. Технические различия между подходами

Как вы правильно заметили, оба способа экспорта функционируют идентично с технической точки зрения:

  1. Отдельный экспорт:

    function PriceListPage() {
       return (<></>);
    }
    
    export default PriceListPage;
  2. Экспорт при объявлении:

    export default function PriceListPage() {
       return (<></>);
    }

Оба метода допускают создание компонента и его последующий импорт, в обоих случаях вы получаете доступ к компоненту как к значению по умолчанию.

2. Рекомендации и лучшие практики

В сообществе React и TypeScript, а также среди разработчиков существует несколько подходов и предпочтений, связанных с экспортами:

Выбор между именованными и экспортами по умолчанию

  • Именованные экспорты:

    • Именованные экспорты рекомендуется использовать, если необходимо экспортировать несколько компонентов или функций из одного файла. Например:
      
      export function PriceListPage() {
      return (<></>);
      }

    export function FavouriteListPage() {
    return (<></>);
    }

    
    - Преимущество именованных экспортов заключается в том, что при импорте вы должны использовать те же имена, что и в определении функции, что делает код более читабельным и менее восприимчивым к ошибкам.
  • Экспорт по умолчанию:

    • Используйте экспорт по умолчанию, когда файл ориентирован на один компонент или функцию, и когда выполнение более гибкого именования при импорте может быть полезным.
    • Экспорт по умолчанию позволяет импортировать компонент с произвольным именем, что может быть полезным, если вы хотите избежать конфликтов имен.

Пример использования экспорта по умолчанию:

// В одном файле
export default function MyComponent() {
    return (<></>);
}

// В другом файле
import AnyName from './MyComponent'; // Можно использовать любое имя

Рекомендации по стилю кода

  1. Консистентность: Важно придерживаться единого подхода в течение всего проекта. Если команда решила использовать именованные экспорты, то лучше избегать смешивания с экспортами по умолчанию.

  2. Документация и комментарии: При использовании именованных экспортов важно документировать, что экспортируется из файла, поскольку это делает код более прозрачным для других разработчиков.

  3. Отказ от экспорта по умолчанию (в некоторых случаях): Некоторые разработчики предпочитают полностью отказаться от экспорта по умолчанию, чтобы избежать путаницы и гарантировать, что имена компонентов оставались известными и понятными.

Заключение

В итоге, выбор между экспортами по умолчанию и именованными экспортами в React с TypeScript зависит от ваших предпочтений и целей проекта. Именованные экспорты могут обеспечить лучшую читабельность и поддерживаемость, в то время как экспорты по умолчанию позволяют гибко работать с импортами. Рекомендуется определить стиль, который будет использоваться в команде, и придерживаться его.

Оцените материал
Добавить комментарий

Капча загружается...