tgoop.com/prog_way_blog/178
Create:
Last Update:
Last Update:
Именованный и неименованный экспорт
Начнем с того, что экспорт бывает разный — именованный и неименованный.
Именованный экспорт — это использование ключевого слова export
перед каждой сущностью или при использовании «паттерна» export list
, когда все экспортируемые сущности перечисляются в одном месте файла:
// именованный экспорт
export const a = 1
// export list
const c = 3
const d = 4
const f = 5
export {
c,
d,
f
}
Стандартный же экспорт — это экспорт с использованием конструкции
export default
:// стандартный экспорт
const b = 2
export default b
Помимо разницы оформления каждого из способов экспорта в коде, также отличается и их импорт. В случае с именованным экспортом у нас есть возможность импортировать каждую сущность из файла по его названию:
import {
Status,
getUser,
render as renderFunction
} from './file'
Стандартный импорт:
import React from 'react'
А также их комбинация:
import React, { useState, useMemo } from 'react'
Но что насчет проблематики? Почему разработчики каждый раз сталкиваются с вопросом какой лучше экспорт выбрать?
Чтобы понять это, рассмотрим следующий пример:
import Angular from 'react' // абсолютно валидно
import { Status as UserStatus } from './file'
В двух импортах выше видна основная проблема — неявные переименования. Такие переименования сущностей могут путать разработчиков, никак не защищают от опечаток, что в совокупности приводит к неоднозначности именований. Из-за всех этих проблем
export default
является инструментом, использование которого только усложнит поиск чего-либо по коду и его отладку.Также к минусам
export default
можно отнести то, что такие сущности индексируются статическими анализаторами медленнее и сложнее, что в больших проектах может повлечь за собой проблемы с линтингом.Всех этих проблем лишен именованный экспорт. Его обработка сравнительно быстрее, а имя сущности сохраняется на протяжении всего пути от экспорта до импорта, что устраняет возможные неоднозначности.
Мой вывод: я стараюсь сократить использование
export default
до минимума, предпочитая именованный экспорт и импорт. Использовать export default
валидно только для интеграции вашего кода с уже готовыми решениями, например, это может быть React.lazy
и React.memo
, которые работают только с export default
по умолчанию. У меня есть удобный хак как это обойти, но это тема для отдельного поста.Спасибо за прочтение, это важно для меня ❤️
#web #javascript #react #patterns
BY progway — программирование, IT

Share with your friend now:
tgoop.com/prog_way_blog/178