React+TypeScript: divでcheckboxを実装

はじめに

暗記カードをシングルクリック onClick でチェック、ダブルクリックonDoubleClickで削除したい。

と思ったのですが、onDoubleClickはボタンでしか使えない。

checkboxにonClickを使ってonDoubleClickを実装しようとしたらcheckboxはonClickを受け付けない。

そもそもReactでcheckboxやbuttonを使うのは邪道なのかもしれない。divで全部実装しようと思いついて、単純な例でやってみました。

実行例

See the Pen checkbox-div-version by kalz2q (@kalz2q) on CodePen.

説明

mapを使うのでdivにkeyを付けたのだけどonClickでkeyが取得できない。keyと同じ値をidに入れたら取得できました。

clickCountにカウントを入れて、setTimeoutで決めた時間以内にサイドクリックするとダブルクリックと見做すと言うロジックなのでダブルクリックと認識されない場合が生じる。再度トライすればいいだけなので特に問題はない。

buttonにはonDoubleClickと言う便利なメソッドがあるので、これと同じことをシンプルな形で出来るみたい。buttonで実装すればダブルクリックの判定と、プログラム自体が綺麗になるだろう。しかし、buttonによる制限があると思うのでやってみないとわからない。

Reactのプログラムを見るとcheckboxは皆さん多用している。便利だものね。buttonは多くの場合divで作っている様に見える。

React+TypeScript: ダブルクリック その2

はじめに

Reactでダブルクリックを拾うのの別バージョンです。

前のバージョンのがプログラムの中で使おうとしてうまく動かなかったのでこれで再度試してみようと思います。

実行例

See the Pen Untitled by kalz2q (@kalz2q) on CodePen.

説明

前のはcouterとsetTimeoutを使って区別していたけれど、今回のはuseRefを使って管理している。

React+TypeScript: checkboxとlabel for

はじめに

作りかけです。

checkboxを利用した大きなボタンを作るためにhtmlでlabel forと言うのを使うのを、Reactでどうやるか研究中。

実行例

See the Pen Untitled by kalz2q (@kalz2q) on CodePen.

説明

label for => label htmlfor とします。大きなボタンにするにはさらにdivで囲んでclassNameを付けて形を整えます。

React+TypeScript: checkboxをmapする

はじめに

Reactでmapの中にcheckboxを入れた時の用例を探してあったのをローカルとcodepenで動く様になりました。

実行例

See the Pen Untitled by kalz2q (@kalz2q) on CodePen.

説明

元記事 Reactでフォームを扱う方法についてまとめました【React/Input/Radio/Select】

この例ではkeyを指定せずにmapの中にcheckboxを置いていて、checkの管理はhandleChangeの中でやっている。keyを指定する方法は私の徳川歴代将軍名の記事で紹介しているやり方で出来るがあのやり方はデータのidと勘違いしていて混乱している。

mapの中にlistを置けばkeyを指定出来るのでそのやり方も試してみたい。

元記事を移植するに当たりオブジェクト配列の型を指定する必要があった。

type の使い方
type Item = { id: number; ... } // セパレーターはセミコロン 型は大文字始まりにする
const [items, setItems] = useState<Item>( data ) // 型定義は <Item> である。<[Item]> ではない
const data = [ { "id": 1, ... // セパレータはカンマ key は string で大丈夫

React+TypeScript: 配列を変更してhookで結果を表示する

はじめに

配列を弄って表示が変わることの確認です。

実行例

See the Pen slice-array-example by kalz2q (@kalz2q) on CodePen.

説明

javascriptはimmutableでないので、一旦別の変数に入れて弄ってからhookで元の配列に戻せば表示に反映される。

React+TypeScript: ダブルクリック

はじめに

ダブルクリックをReactでどうやるか。

実行例

See the Pen double-click-demo by kalz2q (@kalz2q) on CodePen.

説明

onDoubleClickと言うイベントはあってダブルクリックしか使わないのならば便利なようなのですが、シングルクリックと両方使うとイベントかシングルクリック2回とダブルクリック1回発生してしまいます。これを避ける方法はネットに載っていて、

https://naughtldy.hatenablog.jp/entry/2018/02/27/160000

などを参考にしました。

React+TypeScript: 徳川歴代将軍名を覚える

はじめに

まだ作りかけです。

江戸時代の時代劇を見るのに八代目将軍吉宗、とか言いますよね。

BOXをクリックすると名前が出たり消えたりするので遊んでみて下さい。

初代の家康と5代目綱吉、8代目吉宗、最後の15代目の慶喜は始めは出た状態ですが、これもクリックすると消えます。

実行例

See the Pen shogun by kalz2q (@kalz2q) on CodePen.

説明

複数のclassNameを指定する方法がわかったので使いました。 className={`${data[id].color} ${"BOX"}`} と言うようにします。