[TIL] 0129


storybook refactoring
  • 文書はapiからのデータの山を提供し、apiからのデータの山ではない.
  • argsはpropsにコントロールを追加するために使用され、コントロールが必要ない場合はpropsのように挿入できます.
  • export defaultと定義されたargtypesはすべての物語の共通点であり、args
  • に入る.
    2つ以上のバージョンの
  • が必要な場合は、テンプレートを作成しargを個別に指定します.
    ->他の重複コード(寸法)を記述する必要はなく、propsを作成するだけなので、
  • 物語の本と槍の理由が分かりました.
  • 小単位の素子も純粋な支柱ではなく、外部の影響を受ける(api,context).マニュアルを作成するには、純粋なコンポーネント
  • である必要があります.
  • ですが、各ページに1つの要素が深く入り込む必要があります.この場合、パッケージ要素
  • が作成する.
  • wrappedは、contextおよびapi関数を受信し、実行コードを宣言し、LikeToggleにログインしたユーザおよびapi関数をpropsとしてユーザ
  • に渡す.
  • ストーリーブックに書かれている場合は、ログインの有無をpropsに設定し、onClick関数(API)を渡さずに済みます
    https://kciter.so/posts/effective-atomic-design
  • コンテキストでサーバ
  • が要求するかどうかを検証する.
  • を試した指導者に質問
  • TypeScript Project
    実施第
  • 第2項RandomQuotes
  • 構造関数の実行文の順序が少し混乱している
  • this.renderが実行されるとmountも一緒に実行され、buttonでイベントハンドラ関数が保留されるとthisになります.quoteとthis.作者未発表の状態
  • コールバック関数は、実行前に実行コードが有効かどうか分からないようです.
      constructor($target: Element) {
        // 실행 순서가 궁금해짐 = 콜백함수는 실행되기 전까지는 실행코드가 유효한지 모른다
        super($target);
        this.render();
        this.$quote = document.querySelector('.quote'); // 비효율적인건가??
        this.$author = document.querySelector('.author');
        this.handleClickButton();
      }
    
      async handleClickButton() {
        // api실행
        const { data } = await axios.get('https://free-quotes-api.herokuapp.com/');
        this.$quote.innerHTML = `"${data.quote}"`;
        this.$author.innerHTML = data.author ? `- ${data.author}` : '';
      }
    
      mount() {
        // 왜 constructor에서 가져오면 안될까?? - 이벤트 거는게 먼저라서(mount함수가 먼저 실행)..
        const $button = document.querySelector('.change_button'); 
        $button?.addEventListener('click', () => {
          this.handleClickButton();
        });
      }
    
      render() {
        this.$target.innerHTML = '';
        this.$target.innerHTML = this.template();
        this.mount();
      }