📌
React boolean型のprops、trueの時は=trueを省略できる
🤗 いきなり具体例
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
型のprops
がtrue
の場合は省略できる、というReactの仕様をわかってなかったためです!
props
を渡すとき、isBannerShown``isBannerShown=true
が同じ意味です。
こういった小さな勘違いで無駄な時間をとってしまったことを反省しつつ、
学びをシェアしたのでプラマイゼロってことにしたいとおもいます!
追記 さらなる失敗談😇
最初に投稿したときまちがった情報を掲載しておりました〜
自分のまちがえていた箇所😇
-
interface
で定義しているProps
名と、関数に引数定義しているProps
名を同一にしていませんでした💦 -
props
を渡していないので、props
はundefined
となり、isBannerShown
はfalse
となってしまう書き方をしてました(以下のコードの<修正前>)。isBannerShown
がtrue
と同義と書いていてましたが大嘘でした💦
// 修正前
- <MyComponent title="Hello World" /> // isBannerShownはundefined
// 修正後
+ <MyComponent title="Hello World" isBannerShown />
@kaminalyさんにご指摘いただきました。
ありがとうございます🙏🏻
Discussion