💣

[Storybook] Error "Cannot read property 'displayName' of undefine"

2022/02/27に公開

先日、私のプロジェクトで「Cannot read property 'displayName' of undefined」というエラーが発生しました。
使用していた技術は以下の通りです...

  • Storybook (6.2.7)
  • Next.js (10.1.3)
  • React (17.0.2)
  • TypeScript (4.2.4)

最終的に解決することができました。
少々疑問は残りますが、とにかくエラーは解消されました。というわけで、その一部始終をお見せします。

ある親コンポーネントと子コンポーネントのペアのコードを見てください。

// ChildComponent.tsx
import React from 'react'
const ChildComponent: React.FC = () => {
  ...
}

ChildComponent.displayName = 'ChildComponent'
export { ChildComponent }

とくに最後の2行が重要です。

ChildComponent.displayName = 'ChildComponent'
export { ChildComponent }

ここでdisplayNameを指定することで、 ‘displayName’ of undefined でなくなります。
と同時に、これを追記した場合はNamed exportsを使用する必要が発生します。

続いて、親コンポーネント。

// ParentComponent.tsx
import React from 'react'
import { ChildComponent } from './ChildComponent'
const ParentComponent: React.FC = () => {
  ...
  return (
    <>
      <ChildComponent />
    </>
  )
}

このソースコードで重要なのは2行目。

import { ChildComponent } from './ChildComponent'

ChildComponentをNamed exportsでエクスポートしたため、これも同様に呼び出す必要があります。以上です。
これでエラーはおそらく解決するはずです。

それでは、よいコーディングライフを!

Discussion