[レベル1-タスク4]自販機の記憶に残るフィードバック


レベル1最終タスク



どうやって開発したの?

👍 保護された操作


privateと差が少ない
サブクラスにもアクセスできます.

👍 インタフェースの分離



インタフェースとタイプが複雑になると,分離を考慮する.

👍 事前タイプのメンバー関数の宣言

export interface ProductInterface extends ProductType {
  getName(): string;
  getPrice(): number;
  getQuantity(): number;

  decreaseQuantity(): void;
}
classを記述する際にメンバー関数タイプを予め記述するクルーを見た.いい感じだ!

👍 APIの処理

export const requestLogin = async (email: string, password: string) => {
  const response = await request(
    '/login',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        email,
        password,
      }),
    },
    true,
  );
👆 いっそAPIを持ってきた部分を外しましょう.
interface IRequest {
  status: 'success' | 'fail';
  content: any;
}
const { status, content }: IRequest = await requestLogin(email, password);
👆 構造分解割当にインポートして処理します.depth가 덜 깊어질 것 같아요.

👍 TSの$ユーティリティ関数

export const $ = (selector, node: HTMLElement | DocumentFragment = document.body) =>
  node.querySelector(selector);

👍 パラメータが3つを超える場合

export const generateItemPurchaseContentTemplate = (moneyAmount, itemList, change) => `
❗3つ以上のパラメータがある場合、オブジェクトとして受信するとエラーが回避される場合があります.

👍 カリンですか?

const postServer = (baseUrl) => (path) => async (bodyData) => {
	...
}

👍 routerをオブジェクトとして

 this.router = {
      [HASH.PRODUCT_MANAGEMENT]: () => {
        this.productModerator.init();
      },
      [HASH.CHARGE_CHANGES]: () => {
        this.changesModerator.init();
      },
      [HASH.PRODUCT_PURCHASE]: () => {
        this.purchaseModerator.init();
      },
      [HASH.SIGNUP]: () => {
        this.signUpModerator.init();
      },
      [HASH.LOGIN]: () => {
        this.loginModerator.init();
      },
      [HASH.USER_INFO]: () => {
        this.userInfoModerator.init();
      },
    };
this.router[hash]
      ? this.router[hash]()
      : this.router[HASH.PRODUCT_PURCHASE]();
印象的でした!
私はswitch文を使用して多くのブランチを介してルーティングします.
このように객체 프로퍼티의 유무に近ければ、接近速度はもっと速くなると思います.

👍 CustomEvent

const pushStateEvent = new CustomEvent('pushstate', {
    detail: { state },
  });

  window.history.pushState(state, '', href);
  dispatchEvent(pushStateEvent);
他のイベント・オブジェクトにデータを転送できます.

👍 名前は本当にいろいろあります。

1. 변수 이름에는 동사를 넣지 않는다
2. 변수의 단수형에는 관사를 넣지 않는다.
3. 전치사는 최대한 생략한다
動詞や命令式で命名するというコメントもあります
どうしようかな~
どんな方法を使ってももっと似合う方法で…!