💪 React. はい.

27487 ワード

Preface


📌 開発学習6ヶ月のto-be開発者の独学blog🙂ᅠMMM DD ~ DD, YYYY
現在のステータス
HTMLからReactまでの講座を繰り返し聞きましたが、その中で第一段階のターミネーターを説明しやすいようなReactの講座を見つけたと思いますので、ついでに注意します.

➕ afterthought


レッスン内容で「関数とコンポーネントの関係は?」と思う人もいるかもしれません.この部分に感動(?)…!
初めてreactを頭の上に置いた時(習ったのではなく入れるのですが…)Ő▽Ő) 前に習ったJSとDOMが整理されていなかったので、元の接続点に気づかなかった.
「関数がどのように動くのか」はしばらく理解できず、苦しい日々を思い出した.
P.S.陳儒林は授業の最後の部分でCRAを使った.
link to 🛼
※目標:bodyで動的機能を実現

1.基本概念


1)動的動作はreactではなくJavaScriptとしてのみ行われる.

// 🎵 고양이 사진에 있는 heart 모양 button을 누르면 이 button이 다른 모양으로 바뀌고 <li /> 하위에 해당하는 고양이 사진을 추가하기
// (1)
<body>
  <script>
  // STEP 1. 좋아요 button 찾기
  const likeButton = document.querySelector(".main-card button");
    // STEP 2. 좋아요 button에 click event 부여하기
    likeButton.addEventListener("click", function () {
      // STEP 3. 좋아요 button을 click했을 때 button 변경하기
      likeButton.innerHTML = "😍";
      // STEP 4. 좋아요 한 고양이를 추가할 곳 찾기
      const favorites = document.querySelector(".favorites");
      // STEP 5. 새로운 고양이 사진 만들기 = <img src="">
      const newFavoriteImage = document.createElement("img");
      newFavoriteImage.src = "https://cataas.com/cat/60b73094e04e18001194a309/says/react";
      // STEP 6. 고양이 사진을 감싸는 li tag 넣기 = <li> <img> </li>
      const li = document.createElement('li');
      // STEP 7. li tag에 고양이 사진 넣기
      li.appendChild(newFavoriteImage);
      // STEP 8. 좋아요 한 고양이를 추가할 곳에 방금 만든 요소를 넣기
      favorites.appendChild(li);
    });
  </ script>
</body>
JavaScriptで機能を実現し、内容を描くが、文法が複雑で効率が悪い.

2)動的挙動が変化した場合

// 🎵 고양이 사진에 있는 heart 모양 button을 누르면 이 button이 다른 모양으로 바뀌고 <li /> 하위에 해당하는 고양이 사진을 추가하기
// (2)
<body>
  // STEP 2. 고양이 사진을 넣어줄 공간 만들기
  <div id="app"></div>

  <script>
    // STEP 1. <li / >로 고양이 사진을 감싸기
    const catItem = (
       <li>
          <img src="https://cataas.com/cat/60b73094e04e18001194a309/says/react" />
       </li>
    );
    // STEP 3. 고양이 사진을 그릴 위치인 app 찾기
    const 여기 = document.querySelector("#app");
    // STEP 4. React를 사용해서 catItem을 "여기"에 그리기 (render)
    ReactDOM.render(catItem, 여기);
	</script>
</body>
そうすると<script />内にHTML文法を書くとエラーになります.
(SyntaxErrorをキャプチャしていません:Unexpected token"<":「曲げ形状は私が知らないtoken?」
3つのスクリプト関連リンクを追加し、scriptのtypeを「text/babel」に変更する必要があります.
// 👇
// 🎵 React의 source code 추가하기
<body>
  <div id="app"></div>
    // STEP 1. React library의 source code 추가
    <script
      src="https://unpkg.com/react@17/umd/react.development.js"
      crossorigin></script>
    // STEP 2. React DOM library의 source code 추가
    <script
      src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"
      crossorigin></script>
    // STEP 3. Babel code 추가
    <script
	  src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
    // STEP 4. <script>의 type 변경
    <script type="text/babel"> 
      const catItem = (
        <li>
          <img src="https://cataas.com/cat/60b73094e04e18001194a309/says/react" />
        </li>
      );

      const 여기 = document.querySelector("#app");
      ReactDOM.render(catItem, 여기);
    </script>
</body>
JavaScriptインプリメンテーションのみを使用するよりも、reactを使用すると<script />でHTML構文を使用することもできるため、コードはより直感的で簡潔である.
このように、JSよりも<script />内で容易なHTML構文を用いても、<div id="app"></div>をHTML中のimgに描画することができる.
Babelは翻訳者です(「compiler」で表現します).
簡単に作成したJSX構文をJavaScriptに変換して、ブラウザが理解できるようにします.('Get browser-compitable JavaScript out') .
私が書いたReact構文(const catItemからReactDom.renderの部分)はBabelsitedで見ることができ、Reactで書かれたコードがbrowserの言語に変更されており、開発者ツールheadtagで新しく生成された<script />でも見ることができます.
e.g. React.createElement("img", ...)Babelのおかげで、ブラウザは私のコードを理解することができます.

関数にcomponentを入れる方法

// 🎵 {name}과 {introduction} component를 함수에 넣기
function Profile(name, introduction) {
  return (
    <div>
      <h2>{name}</h2>
      {introduction}
    </div>
  );
}

Profile("Ian", "개발 잘 하고 싶다."); // <div /> element에 있는 name 자리에 "Ian", introduction 자리에 "개발 잘 하고 싶다."
Profile("Mai", "나도 언젠가 Typescript 하고 싶다."); // <div /> element에 있는 name 자리에 "Mai", introduction 자리에 "나도 언젠가 Typescript 하고 싶다."

// ↓ 위처럼 함수를 호출하듯 쓰지 않고 tag처럼 쓸 수도 있음

<Profile name ="Ian" introduction = "개발 잘 하고 싶다." />
<Profile name = "Mai" introduction = "나도 언젠가 Typescript 하고 싶다." />

ステータスの作成時

// 🎵 1씩 증가하는 상태 만들기
const counterState = React.useState(1); // 인자로 들어간 1은 초기값임
const counter = counterState[0]; // useState의 첫 번째 상태 (counterState[0]) 는 counter 그 자체이고
const setCounter = counterState[1]; // useState의 두 번째 상태 (counterState[1]) 는 counter를 조작한 setCounter

// ↓ 

const [counter, setCounter] = React.useState(1);
console.log("카운터", counter);

2.機能実装コード例


Heartを押して3枚目の写真をお気に入りに追加する機能

// STEP 1. favorites의 상태가 변하므로 state를 추가하고 초기값 설정 const [favorite, setFavorites] = React.useState([CAT1, CAT2]);
// STEP 2. mainCard에서 하트를 눌렀을 때 `function handleHeartClick(){}`이 되도록 호출해야 하는데, 이 함수가 자식 component에 있으므로 부모 component인 const App으로 이동
// STEP 3. 부모 component에서 function handleHeartClick(){}에 `setFavorites`를 설정
// STEP 4. MainCard는 {handleHeartClick}을 props로 받아서 버튼의 onClick에 적용

<body>
	<div id="app"></div>
    <script
      src="https://unpkg.com/react@17/umd/react.development.js"
      crossorigin></script>
    <script
      src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"
      crossorigin></script>
    <script
	  src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>

    <script type="text/babel">

      const MainCard = ({ img, handleHeartClick }) => {
        return (
          <div className="main-card">
            <img src={img} alt="고양이" width="400" />
            <button onClick={handleHeartClick}>🤍</button>
		  </div>
        );
      };

      const App = () => {
        const [favorites, setFavorites] = React.useState([CAT1, CAT2]);
        function handleHeartClick() {
          setFavorites([...favorites, CAT3]);
          // setFavorites([...favorites, CAT3]) = setFavorites([CAT1, CAT2, CAT3])
        }
        return (
          <div>
            <MainCard img={mainCat} handleHeartClick={handleHeartClick} />
            <Favorites favorites={favorites} />
          </div>
        );
      };

      const 여기 = document.querySelector("#app");
      ReactDOM.render(<App />, 여기);

    </script>
</body>

Endnote


🔗 related documents


返信ドキュメント-Webサイトに返信を追加
BABEL
MDN - Using Fetch
Git Hub - Public APIs
ブリッジキャプテン-非同期処理、Call Back
キャプテンブリッジ-Promise
板橋隊長-asyncとAwait
Info Learn-AsyncとAwait
キャプテンブリッジ
Inf Learn - Webpack
react-新しいreactアプリケーションの作成:reactアプリケーションの作成
キャプテンブリッジ-Node。jsとNPM
Inf Learn - Node.jsとNPM

🙇 the source of this content


Info Learn-Jin Yulim