2
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アプリ100本ノック】06 Profile

Posted at

はじめに

ゆかっしゅです。
2021年に事務職からデザイナー/コーダーにジョブチェンジをし、現在はフロントエンドエンジニアにスキルアップするべく、モダンフロントエンドを学習しています。

ReactやTypeScriptの基礎学習は終了したのに、なかなか0から自分だけでアプリを作れないので手を動かすべく「Reactアプリ100本ノック」 に挑戦してみようと思います。

Reactアプリ100本ノックルール

  • 主要なライブラリやフレームワークはReactである必要がありますが、その他のツールやライブラリ(例: Redux, Next.js, Styled Componentsなど)を組み合わせて使用することは自由
  • TypeScriptを利用する
  • 要件をみたせばデザインなどは自由

06. Profile

スクリーンショット 2025-05-01 131004.png

問題

プロフィールカードを生成できるサービスを作成します

目的

入力フィールドの管理を行い、状態の更新と状態を使ったUIの更新を学びます

達成条件

機能的なプロフィールカード:

  • ユーザーが名前、誕生日、電話番号を入力し、プロフィール写真をアップロードできる
  • アップロードされた画像がプレビューとして表示される
  • ユーザーが生成したプロフィールカードをPNG形式でダウンロードできる

実際に解いてみた

利用技術

React(19.0.0)
TypeScript(5.0)
Next.js(15.3.1)
Tailwindcss(4.0)
jotai(2.12.3)
Vercel
html2canvas(1.4.1)

解答時間:2時間

ボタンを押すとプロフィールCardの画像をダウンロードするところの実装がわかりませんでした。
html2canvasというJavaScriptのライブラリを使用しました。
html2canvasを使用すればhtmlの要素をキャンバスに描画して、画像として保存ができます。
しかしhtml2canvasを扱う際、Tailwindcssを併用しているとエラーが出るので注意が必要です。
(後ほど詳しく記載します)

リンク

html2canvasとTailwindcssの衝突エラー

スクリーンショット 2025-05-01 133647.png

Error:Attempting to parse an unsupported color function "oklch"

プロフィールカードの画像をダウンロードしようとボタンを押すとこのようなエラーが出ました。
oklchがサポートされてないって雰囲気だけどそもそもoklchってなんぞ??と思ったので調べてみました。

oklch(オーケールチ)

2023年以降CSSに導入された新しい色指定方法の一つみたいです。
rgbとかHSLとかと同じやつですね。

Tailwind CSSではv4.0からrgbではなく、このoklchでカラー指定されているようです。
html2canvasはこのoklchのカラー指定には対応しておらずエラーが出てしまったみたいです。

oklchの詳細に関してはこちら
https://blog.nasbi.jp/programming/frontend/css/good-looking-color-oklch/

エラー解決方法

画像で保存する部分の色指定に関してはTailwind CSSではなくインラインスタイル等ほかの方法でCSSを記載するとエラーが解消されました。

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