Open5

JavaScript・TypeSceipt逆引きリファレンス

てりーてりー

keycode

e.keyを使うと、画像のようにkeycodeの名称が表示される。
文字消したり改行が反映されない。
Image from Gyazo
https://codesandbox.io/s/modest-stallman-qok69?file=/src/App.js

key毎にイベントを設定

この記事参考に1つ1つの要素に挙動を設定していく。
https://qiita.com/riversun/items/3ff4f5ecf5c21b0548a4

keyイベントを取り敢えず中止

if(e.key.length > 1){
 return;
}

これでkeyが取得できた時はreturnする

入力フォームでEnterで入力完了

該当コード

onKeyDown={(e) => {
              console.log({ e });
              if (isComposed) return; //変換中のenter押下はreturn
              if (e.target.value === "") return; //入力空でのenterはreturn
              if (e.key === "Enter") initializeLocalPeer(e);
            }}

全体像
https://github.com/gunners6518/webRTC-react-firebase/commit/3dd9f231b7babd3ed33f62adaf0a0fecc3876273

変換のEnterは無視する

Reactのコンポジションイベント
https://ja.reactjs.org/docs/events.html

変換の初めと終わりのイベント。
ここでisComposedの値を更新。

 onCompositionEnd={() => setIsComposed(false)}
 onCompositionStart={() => setIsComposed(true)}

isComposedならonKeyDownをreturnする

 if (isComposed) return

入力エリアが空ならEnterで更新しない

e.terget.value === ""でreturnさせる

 if (e.target.value === "") return; //入力空でのenterはreturn
てりーてりー

久々に「JavaScript本格入門」を読んだので振り返りをまとめる

Array

要素が順番に並んでいるコレクション
インデックスで管理する

map、forEach、filter、reduceメソッドなど

reduce:配列に対して、左から右へ関数を実行して単一の値にする
使い所

  • 値の合計出す
  • 値の重複の個数出す
  • 値を変換する

など

今回の実用例
ObjectのArray型であるitemをidをkeyとしたMap型のmappedItemに変換する

item = [{ id: 1, name: "りんご", value: 2},{id: 2, name: "いちご", value: 3}]
const mappedItem = items.reduce((acc, item) => {
 return acc.set(item.id, item)
}, new Map());

Map

keyとvalueのオブジェクトのコレクション
keyで管理する

set, getメソッド

Mapはsetでコレクションの追加、getでコレクションの取得が出来る

const map = new Map()  // 空のMapを作成
map.set(1, "first")  // コレクションを追加
console.log(map.get(1)) // 出力:"first"

setメソッドは複数迂回同じコレクションに使うと、上書きする
Mapのkeyは任意の任意の型で指定出来る