matsutoba’s blog

フロントエンドエンジニアをしています

Reactでのstateの変更とイベントの再登録について

windowにクリックイベントを登録して、クリックしたときにstateの状態によって処理を切り分けたいので、こう書いてみた。 import { useState, useEffect, useMemo } from "react"; export default function App() { const [id, setId] = useState(""); const…

useQueryでidにundefinedを指定したときにデフォルト値を返すキレイな書き方は?

指定したidに該当するデータを取得するとき、TanStack QueryのuseQueryを書くとしたら、 const fetchData = (id: number) => { ... } const {data} = useQuery({ queryFn: () => fetchData(id) });のようになるはず。 idがundefinedだったら? idが number|u…

react-base-tableに設定するデータはidが必要

テーブル形式のデータをReactで表示するときに、ソートや列の幅調整などもできるreact-base-tableライブラリを使うことにしました。autodesk.github.ioサンプルを見ながら実装していたところ、セルに表示する文字列が長く3行以上になると何故かテーブルがチ…

なっとく!アルゴリズム

paizapaiza.jp のスキルチェックでコーディングをするのが勉強になるのでたまにやっています。スキルチェックには問題ランクSからDまであります。Dランクから順番にチャレンジして行って、Aランクの問題までは完全回答できたのですが、Sランクの問題になると…

react-windowのVariableSizeListで行の高さが不定のリストを表示したい

備忘録。react-windowのVariableSizeListで、行の高さが固定ではなく文字数により高さが変化するリストを表示したい。いろいろ調べた中で一番負荷が低そうでやっていることがわかりやすかったブログ。code sandbox にサンプルを上げてくれているので、コード…

Reactで簡単にアイコンを使いたい

Reactのアプリを作るときにきれいなアイコンを使いたい時は、いつもFontAwesomeを設定して使っていましたが、もっと簡単にいろいろなアイコンを使うことができるライブラリがありました。 react-icons www.npmjs.comこちらのページから対応しているアイコン…

Key-Valueで定数として定義しているオブジェクトの値をUnion型として使いたい

事前に定義されているオブジェクトから値の部分をUnion型として、関数のパラメータの型に使いたい。 const ItemName = { First: "No1", Second: "No2", Third: "No3" } as const; type ItemNameType = keyof typeof ItemName; // "First" | "Second" | "Thir…

webpackの覚書

なんとなく使ってしまっているwebpackeについて、よく使うところの覚書。 webPackとは webpackでできること モジュール方式とは モジュール CommonJS Modules (CJS) ECMAScript Modules (ESM) webpackのインストール コマンドのカスタマイズ 初期状態のpacka…

scrollHeightの変更を検出したい

あるdiv要素の中身が動的に変更されるとき、そのdiv要素のscrollHeightの値を取得したい。 ResizeObserverを使う場合 divのサイズ変更のタイミングで通知してほしい場合はResizeObserverで良さそう。 import React, { useEffect, useState, useRef } from "r…

Reactのメモ化の覚書

いつも忘れるReactのメモ化関連のメモ。 定数値はコンポーネントの外に出す コンポーネント内のオブジェクトは毎回インスタンス生成されてしまうので、コンポーネントの外に出す。 // 普通に書いたとき const ButtonElement = () => { const foo = ['a', 'b'…

関数の引数の型に定数オブジェクトの値の型を使いたい

定数オブジェクトのValueの値のユニオンタイプを作って関数の引数の型指定として使いたいときのメモ。Foo型のキーのユニオンタイプを作ってから、値のユニオンタイプ作れば良い。 const Foo = { FIRST: 1, SECOND: 2, THIRD: 3 } as const; type FooKeysType…

react-dndで複数オブジェクトのドラッグ選択とドラッグ&ドロップ

Reactでオブジェクトをマウスのドラッグで複数選択し、ドラッグ&ドロップするコードのメモ。react-dndだけではマウスドラッグの範囲選択ができなかったので、react-selectoとreact-moveableを組み合わせて考えた。範囲選択したオブジェクトの位置を維持した…

nodeのバージョン管理ツールは何が多く使われているのか

GitHub Starの数で比べてみた 何となくnodenvを使っていましたが、最近Voltaを使っている人も多いので調べてみました。GitHubのStarの数で比較してみようかと思って調べていたらところ、こちらのサイトを発見したので使わせていただきました。www.nebula-gra…

Javascriptのことをどれくらい知っているか確認してみた

State of JavaScript 2022 最近教えてもらって、次にどのライブラリの勉強をするか参考になりました。stateofjs.com最後まで頑張ってアンケートに協力すると、ナレッジスコアが表示されました。 スコアが40%しかなく知らないことが多かったので、後で調べる…

React Query 最初に覚えておくことメモ

React Query React Query を使い始めるにあたり、とりあえず知っておきたいことのメモ。 React Queryとは tanstack.com データのフェッチ、キャッシュ、同期、更新を簡単に行うことができるライブラリ。 現在はTanStack Queryという名前に変わっている。 Rea…

jestでフックが返す関数を呼び出したとき、同じフック内の別の関数が呼び出されたかテストしたい

Reactでこのようなカスタムフックを作成し、callFoo() を実行したら foo() が実行されていることを確認したい。 export const useMyCustom = { const callFoo = ():void => { foo(); } const foo = ():void => { // ... } return { callFoo } } spyOnを使っ…

minioのdockerコンテナが起動できない

AWS S3 をローカルでエミュレートしてくれる minio を使っているのですが、最近イメージを最新に更新したら急に起動できなくなりました。ログを見るとなにか出ているのですが意味がわかりません。 ERROR Unable to use the drive /data: Drive /data: found …

jestのtoBeとtoEqualの使い分け

jestでユニットテストを書くとき、レビューで指摘をもらって忘れがちなtoBeとtoEqualについてのメモ。 toBeとtoEqualの使い分け toEqualを使えばとりあえずテストは通ってしまうが、期待している型に明確に一致する判定をしたほうが良い。 toBe https://jest…

huskyについて調べた

huskyは、公式サイトによると、「コミットなどを改善します」ということなので、コミットのときに何かしてくれるツールということらしい。 Husky improves your commits and more typicode.github.io コミットやプッシュをするときに コードのlintの実行 コ…

SourceTreeでhuskyを実行するとcommand not found になる

SourceTreeを使っていてコミット時にhuskyが実行されるようになっているとき、command not found になってしまう場合の対応です。 コマンドラインツールのインストール SourceTreeのメニューバーに「コマンドラインツールをインストール」があるので、ここか…

next.js + typescript で Redux Toolkit を使う最小サンプル

Zennにまとめました。zenn.dev

macOSでバックスラッシュを入力

macOSで日本語キーボードを使ってバックスラッシュを出すには Option+円記号 webpack.configを編集するときに、windowsで編集しているときと同じ感覚でいじっていたら You may need an appropriate loader ...というエラーになったので調べてみたところ、mac…

nextjs + typescript + jest + enzyme の最小サンプルを動かしたい

Zennにまとめました。 ただ、今は React Testing Library を使うほうが一般的かもしれません。zenn.dev

box-shadowのパラメータをChromeのDeveloperToolで指定する

CSS

CSSでbox-shadowを指定するとき、いつも何番目のパラメータが何だったか思い出せなくなるのですが、chrome の開発者ツールを使えばUIで指定できました。 F12キーを押すなどしてChormeのDeveloperToolを表示(これはやらなくてもOK) 対象のオブジェクトを右ク…

axiosで配列形式のパラメータのシリアライズ

axios を使って、ASP.NET Core に配列型のデータを送りたい場合のメモです。 foo[0].bar=1&foo[0].hoge=2&foo[1].bar=3&foo[1].hoge=4のようなデータを送ります。 qsライブラリで配列形式を変換 qsを使って配列形式を変換する方法を使いました。まず、元のデ…

モーダルダイアログの背景半透明化で間違えたこと

CSS

CSSでモーダルダイアログを作ろうと思い、半透明にするときによく間違えたことです。 結論としては、rgbaを使用してダイアログ部分は透明にならないようにする、でした。 opacity 子要素も半透明になる rgba 子要素には影響しない Opacityで半透明にする opa…

EntityFrameworkでincludeしているのにデータが取れない

C#

EntityFramework を使ってデータベースからデータを取得するとき、Includeを使えば、子要素もいっしょにとって来られるはずなのに、どうしてもnullになってしまいました。 var query = _context.Customers .Include(c => c.Reservations) .Where(e => e.Cust…

axios 0.20.0 で DELETEリクエストのデータをセットできない

axios 0.20.0 のバグ axiosを使って DELETE リクエストを送る時、パラメータを指定する場合は、dataをキーにしてオブジェクトを送信すれば良いということは調べて分かったのですが、どうしても HTTPステータス415エラーになってしまいました。 axios.delete(…

Katalon Studio による自動テスト

※ このエントリは2020年時点のものですQiitaにいくつかまとめておいた記事のリンクです。 Keywordやプロファイルの使い方についても後日まとめ予定です。 なお、この記事は Katalon Stduio ver5.x でテストケースを作成したときのものです。qiita.comqiita.c…

lodashでグループごとの集計をしたい

JavaScriptでgroupBy集計をしたいのですが、意外とシンプルな例が見つからなかったのでメモしておきたいと思います。 let data = [ { date: '2020-01-03', gender: '男' }, { date: '2020-01-01', gender: '男' }, { date: '2020-01-01', gender: '女' }, { …