📌

React boolean型のprops、trueの時は=trueを省略できる

2021/03/25に公開

🤗 いきなり具体例

MyComponent.tsx

interface MyComponentProps {
  title: string;
  isBannerShown: boolean;
}

export default function ({title, isBannerShown}: MyComponentProps){

 もろもろ省略

return (
  <Text>{title}</Text>
  
  <div>
    {isBannerShown && <Banner/>} // isBannerShownがtrueの時だけバナーがでる
    <p>.....略
  </div>

);

}

index.tsx

  もろもろ省略

return (
  <MyComponent title="Hello World" isBannerShown />
);

index.tsx

  もろもろ省略

return (
  <MyComponent title="Hello World"  isBannerShown={true} />
);

は同じ意味になります。

🤗 自分の失敗談

フロントエンドの人にはよくあると思うのですが、
キャンペーンバナーを差し替えるというタスクがありました。

isBannerShownで制御しているのはすぐわかったのですが、
その次に、isBannerShownをどこで制御しているのかわからないという問題にハマりました😑

※追記このコメントまちがえています。勘違いして理解していました。
オプショナルのpropsであってもboolean型のpropstrueの場合は省略できる、というReactの仕様をわかってなかったためです!

propsを渡すとき、isBannerShown``isBannerShown=trueが同じ意味です。

こういった小さな勘違いで無駄な時間をとってしまったことを反省しつつ、
学びをシェアしたのでプラマイゼロってことにしたいとおもいます!

追記 さらなる失敗談😇

最初に投稿したときまちがった情報を掲載しておりました〜

自分のまちがえていた箇所😇

  • interfaceで定義しているProps名と、関数に引数定義しているProps名を同一にしていませんでした💦
  • propsを渡していないので、propsundefinedとなり、isBannerShownfalseとなってしまう書き方をしてました(以下のコードの<修正前>)。isBannerShowntrueと同義と書いていてましたが大嘘でした💦
// 修正前
-  <MyComponent title="Hello World" /> // isBannerShownはundefined

// 修正後
+  <MyComponent title="Hello World" isBannerShown />

@kaminalyさんにご指摘いただきました
ありがとうございます🙏🏻

Discussion