かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

React Hooks コンポーネントのPropsにデフォルト値をつけたい

// Credit.js
export function Credit({ character, singer }) {
  return (
    <>
      <b>{character}</b>
      <small>song by: {singer}</small>
    </>
  );
} 

こんな感じのコンポーネントがあり、props を渡さなければデフォルトで character, singer を表示させたい

1. オブジェクトの引数を分割代入で取る時のデフォルト値の与え方を使う

👇の形を使う

function({ key = initValue } = {}) {...}

cf. JavaScript 分割代入な引数にデフォルト値を設定したい - かもメモ

// Credit.js
export function Credit({
  character = '大空あかり',
  singer = '遠藤瑠香'
} = {}) {
  return (
    <>
      <b>{character}</b>
      <small>song by: {singer}</small>
    </>
  );
}

// App.js
import { Credit } from './Credit';
function App() {
  return (
    <>
      <Credit />
      <Credit character="新条ひなき" singer="未来みき" />
      <Credit character="双葉アリア" />
    </>
  );
}

👇

<b>大空あかり</b><small>song by: 遠藤瑠香</small>
<b>新条ひなき</b><small>song by: 未来みき</small>
<b>双葉アリア</b><small>song by: 遠藤瑠香</small>

2. defaultProps プロパティを使う

公式ドキュメントには Class Components での使い方が ClassName.defaultProps = {...} と載っているだけだけど React Hooks ( Functional Components ) でも FunctionName.defaultProps = {...} で使えるっぽい

// Credit.js
export function Credit({ character, singer }) {
  return (
    <>
      <b>{character}</b>
      <small>song by: {singer}</small>
    </>
  );
}

// 先 export していても問題ないっぽい
Credit.defaultProps = {
  character: '大空あかり',
  singer: '遠藤瑠香',
};

// App.js
import { Credit } from './Credit';
function App() {
  return (
    <>
      <Credit />
      <Credit character="黒沢凛" singer="松岡ななせ" />
      <Credit character="双葉アリア" />
    </>
  );
}

👇

<b>大空あかり</b><small>song by: 遠藤瑠香</small>
<b>黒沢凛</b><small>song by: 松岡ななせ</small>
<b>双葉アリア</b><small>song by: 遠藤瑠香</small>

 
👍👍👍

sample

See the Pen React Hooks: default props example. by KIKIKI (@chaika-design) on CodePen.

所感

defaultProps を使うほうが関数定義の部分の見通しは良さそう。
ただ公式ドキュメントには Class Components のやり方しか載ってないみたいだったので、Functional Components でも動作はするけど使っても本当に大丈夫なのか少し謎 ( JavaScript の class 自体は中身は prototype 継承を利用した function だと思うので大丈夫だとは思うけど )


[参考]

灯りが照らす場所 (feat. 遠藤瑠香)

灯りが照らす場所 (feat. 遠藤瑠香)

  • アーティスト:connie
  • 出版社/メーカー: Fall Wait Records
  • 発売日: 2019/08/21
  • メディア: MP3 ダウンロード
大空あかりちゃんジャケット選挙1位おめでとうございます🎉