素肌にサスペンダー

個人的な備忘と日記

React.js

【JavaScript】イベント伝播を停止するevent.stopPropagation()

tableのtrをクリックでイベントを実行するようにしていて、trの中のtdのspanをクリックで別のイベントを実行したかったが、trのクリックイベントも実行してしまう。 その場合、親要素のtrのイベント伝播を停止する処理についてメモ。 event.stopPropagation(…

【JavaScript】objectをdeep copyする方法

もとのobjectは変更せずコピーして利用したい場合、JSON.parse(JSON.stringify())でうまくいった。 const obj = { a: 0 } const newObj = JSON.parse(JSON.stringify(obj)) newObj.a = 1; console.log(newObj) // {a: 1} console.log(obj) // {a: 0} ←もとの…

【React】空タグ(<></>)にkeyをつけたい時の対応

配列を取得して.mapなどを使ってレンダリングしたい。 でも、外側にdivなどを使いたく無い時、 こんな感じには書けない。 <key={index}> <>は<React.Fragment>の省略なので、こう書けば良い。 <React.Fragment key={index}> </React.Fragment></react.fragment></key={index}>

【React】onClick時にevent.preventDefaultしつつ関数に引数を渡す方法

handleClick関数内でe.preventDefault()書くとうまくいかないので、JSX内の方で書く。 こんな感じで書けば大丈夫。 const handleClick = (id: string) => { console.log(id) } ... <button onClick={(e: React.MouseEvent<HTMLButtonElement>) => { e.preventDefault() handleClick(id) }} /></button>

【Next.js】Hydration failed because the initial UI does not match what was rendered on the server.が出たときの対応

Next.jsでUIを実装していると、以下のエラーが出た。 Hydration failed because the initial UI does not match what was rendered on the server. マークアップがおかしい時に出るみたい。 自分の場合は、aタグの中にaタグを入れてしまってた。 リンク要素…

【React】JSXで特定の条件において、classNameを追加したい時

こんな感じで書けばOK <div className={`title ${isActive ? 'is-active' : ''}`}></div>

【React】 create-react-appのbuildで、デプロイ先がサブディレクトリの場合

デプロイ先が、https://〇〇〇.com/△△△/のようなサブディレクトリの場合、js,css,画像などを相対パスで読み込む必要がある。 package.jsonに以下を追記すればOK。 homepage": "./", publicフォルダに入っている画像などを読み込んでいる場合は、srcをルート…

【Heroku】ReactのアプリをHerokuにデプロイする

ほとんど下記記事と同じ。 bnsgt.hatenablog.com 以下のみ異なる。 ブラウザのHerokuダッシュボードで、作成したアプリのsetting(https://dashboard.heroku.com/apps/{アプリ名}/settings)Add buildpackをクリックし、node.jsを選択し、Enter Buildpack UR…