正直ベストプラクティスと断言できるほど分かってませんが、次のような使い分けはどうでしょうか?
コンポーネントAとコンポーネントBがあり、依存関係A→Bがある場合、
- A・Bとも同じチームの管理下にある場合: 名前付きエクスポート
- そうでない場合: デフォルトエクスポート
A・Bとも同じチームの管理下にある場合
Bをリファクタリングしたり、Bの責務が変わったたりして、名前を変更することがあると思います。その場合、同じコードベースにあるAは、Bの新名に追従してほしいところです。そうなってくると、名前付きエクスポートのほうが静的解析ツール(TypeScriptなど)で発見できるので、運用がしやすいです。
AとBの開発主体が協調関係にない場合
Aを開発しているチームの指揮命令系統にないところでBが開発されるようなケースです。たとえば、Bがオープンソースのライブラリだったり、別のチームだったり。そのようなケースで名前付きエクスポートを使うと、Bのリファクタリングなどにより、Aをはじめ無関係なライブラリユーザーたちが改名につきあわされるか、気づかず不具合を生んだりすることが懸念されます。Bを開発する立場でも、名前付きエクスポートにしていると、変更に慎重にならざるを得ず、本当は改名したいけど怖いからできない、なんてこともありそうです。AとBの開発主体が協調関係にない場合は、デフォルトエクスポートを使うのも合理性がありそうです。
かくいう僕も気になるところなので他の人の意見も聞きたいです!
Like!