[2021.08.02] React Foundation 2

16514 ワード

📌 1.企業の課題の回顧


💡 定数管理(「配線」ページのpathも定数管理)

class AppRouter extends Component {
  render() {
    return (
      <Router>
        <Route exact path={ROUTES.HOME}>
          <Home />
        </Route>
        <Route exact path={`${ROUTES.PRODUCT}/:id`}>
          <Product />
        </Route>
        <Route exact path={ROUTES.RECENT_LIST}>
          <RecentList />
        </Route>
      </Router>
    );
  }
}
// src/constants/routesPath.js
const ROUTES = {
  HOME: '/',
  RECENT_LIST: '/recentList',
  PRODUCT: '/product',
};

export default ROUTES;

💡 Design

  • のフロントエンド開発者であれば、デザインに注意しましょう.
  • 反応はSPA (single page application)で、FOUC (Flash Of Unstyled Content)が発生したら、何かおかしい!!
  • 💡 Storage Class

  • utilsを使用して
  • を簡潔に作成

    💡 url設計

  • urlに不要な情報をすべて含まないでください.id値さえあればいいです.
    (変更前)http://localhost:3000/productdetail/prod4/나이키%20윈드러너%20블랙%20L/나이키/60000/false(変更後)http://localhost:3000/productdetail/4
  • 💡 構成部品ファイル名

  • 構成部品ファイルは大文字で始まり、
  • です.
  • REACT CRAを使用して生成された場合、jsxを使用する必要はありません.(どうせJSX文法じゃなくて…)
  • 💡 クラスコンポーネントのライフサイクルメソッド

  • 反応系素子のライフサイクルが分かる場合は、以下のコードは使用しないでください.
    :応答ライフサイクルによって実行されます._isMounted変数をコンポーネントDidMount、コンポーネントWillUnmountに作成する必要はありません.
  • class Home extends Component {
            _isMounted = false;
    
    	async componentDidMount() {
    	    this._isMounted = true;
    	    const notInterested = getNotInterested();
    	    const products = await getJsonData();
    	    this._isMounted &&
    	      this.setState({
    	        products: products.filter(
    	          product => !notInterested.includes(product.id),
    	        ),
    	      });
    	  }
    	
    	componentWillUnmount() {
    	  this._isMounted = false;
    }

    💡 注目点の分離

  • App.jsにRoutesに関する情報をあまり書かないで、Routes情報をRoutes.jsに分離してください.

    💡 ! 演算子の使用

  • if-else文を減らし、表示しやすいコードに変換する必要があります.this.setState({isCheckNotInterest: !checked})
  • handleCheckNotInterest = (e) => {
        const checked = e.target.checked;
        if (checked) {
          this.setState({isCheckNotInterest: true});
        } else {
          this.setState({isCheckNotInterest: false});
        }
      };

    💡 Reactではグローバル変数を記述する必要はほとんどありません。

  • には、使用できない例が示されています.
    eモジュール内にグローバル変数を書き込む必要はないが,新しいDate()を定数として管理する必要はない.
  • export const NO_INTERRESTED = "no_Interested";
    export const WATCH = "watch";
    export let RESET_DATE = new Date();
    
    export const setLocalStorageProducts = (watch, product) => {
      const initStorage = JSON.parse(localStorage[watch] || "[]");
    	// 생략...
      RESET_DATE = new Date();
      const date = getFormatDate(RESET_DATE, "YYYYMMDDHHMISS");
      const data = { ...product, date };
    	// 생략...
    };

    💡 ReactではDOMに直接アクセスする必要はほとんどありません。

  • 応答では、直接DOMアクセスを最小限に抑える必要があります.
  • componentDidMount = () => {
        const htmlTitle = document.querySelector("title");
        htmlTitle.innerText = '최근이력 페이지';
    }

    💡 参考資料


    >AirBnb JavaScriptコード会議

    📌 3. Class/Functional Component


    Class vs. Functional


  • なぜFunctional?
    ⑪再開発が必要なら、機能別に開発しましょう!

  • どうしてクラスも勉強しますか.
    classで開発されたコードを使っている会社も多いです.
  • 📌 4. Frontend Libraries


  • ライブラリ選択基準/注意点/エラーの確認
    e Googleで該当するLiveを検索(Googleの提示順に表示)
    eはnpmに入って、ダウンロードがどれだけ活発かを見て、最後の更新はいつですか!

  • 実際の操作でリポジトリを適用するには、次の手順に従います.
    ライブラリをインストールして行う場合は、バージョンを更新するたびに会社が管理するので、できるだけ直接実施します.
  • 📌 5. Agile


    agile : 1. すばやい機敏である

  • 短周期の開発単位を繰り返して大きなプロジェクトを完成する方法.
    現在は滝技術のように簡単に設計>設計>開発>テスト>導入を完了していません.

  • 愛子の日の核心は協力とフィードバックだ.
    会議、日常的な立ち位置、仕切りの共有と協力を通じて