Day 26.
6089 ワード

[ Generic ]

1𗞚𗞚anyとunknown
typeを知らない場合は、開発者を安全にコードするためにunknownではなくanyに設定します.

// 6. generic 응용
export function getGenericReverse<MyType1, MyType2, MyType3 >(arg1: MyType1, arg2: MyType2, arg3: MyType3): [MyType3,MyType2,MyType1] {
return [arg3, arg2, arg1]
}
const result6 = getGenericReverse("철수", "다람쥐초등학교", 8);
console.log(result6);
================================================================================
// 8. generic 응용 - 축약버전2
export function getGenericReverseTUV<T, U, V>(arg1: T, arg2: U, arg3: V): [V,U,T] {
return [arg3, arg2, arg1] 📌 📌 (매개변수) 앞 < >를 사용해 함수에 타입 변수를 추가해 직접 type을 만들어줄 수 있다
}
const result8 = getGenericReverseTUV("철수", "다람쥐초등학교", 8);
console.log(result8);
genericは単一のタイプではなく複数のタイプで動作し、usState、useMutationなどの作成や使用時によく使用されます.useStateの作成ではありませんが、hocで適用できます.
2️⃣ generic - closure
関数から関数を返すモジュールで使用されるgeneric
const aaa = <T>(arg1: T ) => <U>(arg2: U ): [ T, U ] => {
return (있을경우)
}

3️⃣ generic - hoc

<P extends {}> 📌 뭔진모르지만 객체 타입이야~
returnは、:
によってreturn typeを指定することができる.fuction aaa():string{
return “망고”
}
[ Cookie/LocalStorage/SessionStorage ]ブラウザリポジトリ3ペア😎
1. Cookie
2. Local-Storage
3. Session-Stroage
変数にデータを入れると、リフレッシュ時に格納されたデータが失われます.AccessToken、stateもページの更新または移動時に初期化されます.これは、HTML、CSS、JSが再ダウンロードされ、画面に再描画されるため、データを保持するためにブラウザリポジトリに格納する必要があるためです.
🔥 各ブラウザ・リポジトリの特徴が異なるため、プロパティに基づいて3つの側面から1つを選択して使用してください.
1️⃣ Session-Stroage
ブラウザが終了すると、保存情報は消えます
📌 setItem() .getItem()の使用
2️⃣ Local-Storage
ブラウザを閉じても、消失した勘定科目の勘定科目を永続的に保存することはできません.主に、より軽い情報を格納します.
📌 setItem() .getItem()の使用
📌 refreshTokenを学習する前に一時的に使用
3️⃣ Cookie ❗️❗️
Backend-APIリクエストの場合、格納されたデータはhttp通信ヘッダに自動的に含まれます(リクエストはありません!)見送りました.
利点:ブラウザとバックエンドの間でデータを共有する場合は、Cookieで自動的に転送できます.
欠点:データが多すぎると、時間がかかりすぎて効率が低下します.有効期限があるため、ブラウザを閉じても有効期限が切れるまで待つ必要があります.セキュリティに敏感なコンテンツであれば、避けるべきです.
¥¥¥はセキュリティ上重要なコンテンツを交換する際にオプションを使用し、http通信のみで交換する
➡️ secure: https, httpOnly: true
📌 document.クッキーの使用
🔎 Cookieデータの照会

;
を基準にデータ分割が行われます.Cookieデータ加工法🍪
1.セミコロンで分割
2.startWithを使用して必要なコンテンツの鍵を検索してフィルタする
3.key-valueシェイプをvalueのみを保持するように置き換える
[ Basket ]
非会員としてショッピングバスケット&今日は本商品リストを作りましょう!
非会員状態でローカルストレージに一時的に格納しapiで情報の受信を要求する
1ますます情報を手に入れましょう!(文字列をJSON.stringifyに変換)
const onClickBasket = (el) => () => {
localStorage.setItem("basket", el); ---> ❗️ object로 받아오기 때문에 JSON.stringify로 문자열 변환해야한다
};
⬇️
const onClickBasket = (el) => () => {
localStorage.setItem("basket", JSON.stringify(el));
};
JSON.stringyfy()
:object->文字列JSON.parse()
:文字列->オブジェクト2ππ▼▼▼▼▼▼▼▼▼▼▼▼▼

const onClickBasket = (el) => () => {
const { __typename, ...newEl } = el; ---> ❗️ 새로운 NewEl 선언, __typename은 지우자
localStorage.setItem("basket", JSON.stringify(newEl));
};

3▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼

既存データ+new
1.新規に発表された(バスケット)胃とは違う!
const baskets = JSON.parse(localStorage.getItem("basket") || "[]") ---> ❗️ 기존 데이터 가져와서 배열로 바꿔주고 새로 선언 (없으면 빈값)
const { __typename, ...newEl } = el; ---> ❗️ 필요없는 데이터 지우고 새로 선언
baskets.push(newEl);
localStorage.setItem("basket", JSON.stringify(baskets))

重複除外
1.かごの中のel.id(basektel.id)とクリックしたel.idが同じ場合は一時記憶tempに含める
const temp = baskets.filter((basketEl) => basketEl._id === el._id);
値がif (temp.length === 1) {
Modal.error({ content: "이미 담은 상품입니다" });
return;
}
Reference
この問題について(Day 26.), 我々は、より多くの情報をここで見つけました https://velog.io/@wisdoom03/Day-26テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol