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

More than 3 years have passed since last update.

React でカスタムコンポーネントの props に CSS のプロパティを使う

Posted at

やりたいこと

カスタムコンポーネントを使う際に、style の要素を props に含めたいケースがありました。
イメージとしては下記の通りです。

// Custom Box Component
<MyBox flex={1} flexDirection="row">...</MyBox>

例えば Flexbox に関するスタイルの場合、 React Native だと @typesFlexStyle があるので、そちらを import してあげれば事足りる。 参考

React の場合にうまくやる方法があるか探していたのですが、見つけたので自分への備忘も兼ねて残しておきます。

実装方法

CSSProperties を用います。
下記が実装サンプルです。

import React, { CSSProperties } from "react"

type Props = CSSProperties

export const MyBox = React.forwardRef(
  ({ children, ...props }: Props, ref) => (
    <div
      ref={ref}
      style={{
        display: "flex",
        ...props,
      }}
    >
      {children}
    </div>
  )

props から style を除去したい場合、下記のように型を定義してあげることで実現可能です。

import { Box as MuiBox } from "@material-ui/core"
import { CSSProperties } from "react"

type Props = Omit<React.ComponentProps<typeof MuiBox>, keyof CSSProperties | 'style'> & CSSProperties

まとめと書簡

TypeScript は便利です。
built-in の組み込み関数を使いこなせば、再定義しなくても型を定義できるのでメンテナンス性が上がると感じます。

まだまだ知らない便利な機能が多いので、公式ドックやいろんな記事に目を通して使えるようにしていきたいところです。

もし皆さんがご存知な便利な機能があれば是非是非シェアお願いします!

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