0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ReactとEmotionでスタイル分岐対応

Last updated at Posted at 2025-07-15

はじめに

「リンクがあるときは <a>タグにしたいけど、ないときは<div>タグにしたい」みたいな分岐、挙動やスタイルの変化をつけたい場合に書き方に迷ってので備忘録として残します。

前提

やりたかったとこととしては、下記。
Reactで一覧を.map()を使って表示する際、各データには「リンクがある」「リンクがない」という2パターンが混在していた。

リンクがある場合は、<a>タグで囲み、リンクがない場合は普通の<div>タグにしたい。
また、リンクがある場合だけ、クラスを付けて、スタイルを変更したい。

実装コード

{items.map((item) => {
  const LinkWrapper = isLink ? A_CardLink : DIV_CardLink;
  const className = item.href ? "link-style" : "";

  return (
    <li key={item.label}>
      <LinkWrapper {...(isLink ? { href: "https://example.com" } : {})}>
        <span className={`label ${className}`}>{item.label}</span>
      </LinkWrapper>
    </li>
  );
})}

例で、classNameも分岐してますが、この場合、A_CardLink配下のスタイルをつければ、スタイル反映できるため、不要。

おまけ

mapでreturnの省略できるできないについて

省略できる

list.map((item, index) => (
  <div>{item.title}</div>
));

省略できない

list.map((item, index) => {
  const isLink = item.link;
  return <div>{item.title}</div>;
});

使い分け

書き方 必要? いつ使う?
() return 省略 1行で返すだけなら楽、見やすい
{} return 必須 複数行処理したいとき、定数定義したいとき
0
0
0

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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?