1
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?

Tailwind CSSのクラス名が上書きされない問題を解決する

Last updated at Posted at 2024-11-28

はじめに

Reactコンポーネントの props で tailwindcss のクラス名を渡した時にスタイルが上書きされず困ったのでまとめます。

問題

以下のようなPageコンポーネントとButtonコンポーネントがあるとします。

// page.tsx
import Button from ./button

const Page = () => {
  return (
    <Button className={'bg-black'} title={'タイトル'} />
  )
}

export default Page
// button.tsx
import React from 'react'

type Props = {
  children: React.ReactNode
  className?: string
} & React.ButtonHTMLAttributes<HTMLButtonElement>

export const Button = ({
  children,
  className = '',
  ...props
}: Props) => {
  return (
    <button
      className={`px-4 py-2 text-center bg-blue ${className}`}
      {...props}
      >
     { children }
    </button>
  )
}

ButtonコンポーネントのclassNamebg-blackを指定した際に、背景色が黒色になることを期待しますが、実際にはデフォルトで設定した青色のままになってしまいます。

解決方法

tailwind-mergeを使えば解決できます。

// button.tsx
import React from 'react'
import { twMerge } from "tailwind-merge"

type Props = {
  children: React.ReactNode
  className?: string
} & React.ButtonHTMLAttributes<HTMLButtonElement>

export const Button = ({
  children,
  className = '',
  ...props 
}: Props) => {
  return (
    <button
      className={twMerge(
        'px-4 py-2 text-center bg-blue',
        className,
      )}
      {...props}
    >
      { children }
    </button>
  );
}

おわりに

tailwindcssは後に指定したクラス名が優先されると思ってましたが、必ずしもそうではないということを学びました。

参考

1
0
1

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
1
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?