0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

え、これって`true`なの!?ReactのJSXプロパティ、暗黙の了解にご用心!

Last updated at Posted at 2025-06-22

はじめに

Reactでコンポーネントにプロパティを渡すとき、「true」とか「false」ってちゃんと書いてますか?もしかして、

<MyComponent myProp />

みたいに、プロパティ名だけ書いちゃってませんか?実はこれ、自動的に「true」ってことになっちゃってるんです!

これ、最初は省略できて,綺麗で便利だと思うんですけど、後々「あれ?この値ってどこから来たんだっけ…?」って迷子になる原因になりがちなんです。

歴史

HTMLにもある「空気読んでtrue」文化

HTMLにも,一部の属性は値がなくても「ある」ってだけでtrue扱いになるんです。

例えば、チェックボックス。

<input type="checkbox" checked>

これ、「checked="checked"」って書かなくても、checkedって書いてあるだけでチェックが入りますよね?「checked属性がある=チェック済み」って、HTMLが気を利かせてくれてるわけです。

JSXもHTMLに倣っちゃってる!

ReactのJSXも、このHTMLの「空気読んでtrue」文化を引き継いでるんですよ。JSXって、JavaScriptの中にHTMLっぽく書ける便利なやつですよね。結局はJavaScriptに変換されてReactがコンポーネントを組み立てるわけですが、その変換のときにHTMLの属性と同じように、JSXのプロパティも値が書いてないと**true**として扱われちゃうんです。

だから、

<MyComponent myProp />

って書いた場合、Reactの裏側では

<MyComponent myProp={true} />

って解釈されてるってことです。プロパティ名だけ書けばtrueをとして扱ってくれるってことなんですね。

「明示的」が結局一番の近道!

この「値がないからtrue」って機能、コードをスッキリさせられるのは確かです。でも、個人的にはこれ、後で自分が苦しむパターンが多いなと感じてます。

myPropって書いてあるだけだと、このmyProptrueなのかfalseなのか、それとも何か別の値が入る可能性があるのか、パッと見じゃ全然わからないじゃないです。特に、数ヶ月後に見返したり、チームの別の人がコードを読んだりするときには、かなりの「?」を生み出すことになります。

僕が今回、この記事を書こうと思ったのも、この「値がないからtrue」のプロパティを探すのにめっちゃ時間かかったからなんです!

だから、僕からの個人的な感想では,boolean値を渡すプロパティには、truefalseかをちゃんと明示的に書いてあげましょう!

// 断然こっちがオススメ!
<MyComponent myProp={true} />
<MyComponent anotherProp={false} />

// ちょっと待って!あとで後悔するかも…
<MyComponent myProp />

ちょっと手間に感じるかもしれませんが、ちゃんと{true}とか{false}って書くことで、そのプロパティが何を意味しているのか、一目瞭然になります。「あ、これはこういう時にtrueになるやつね!」って、未来の自分やチームメンバーが秒速で理解できるようになるはずです。

結果的に、デバッグの時間も減るし、コードの意図が伝わりやすくます!
より読みやすいコードを目指しましょう!

0
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?