ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 리엑트 강의 내용 정리2
    카테고리 없음 2022. 7. 1. 23:20

    useEffect

    코드가 한번만 실행될 수 있도록 한다

    import React, { useEffect } from "react";
    import { useState } from "react";
    
    function App() {
      const [counter, setValue] = useState(0);
      const [keyword, setKeyword] = useState("");
      const onClick = () => setValue((prev) => prev + 1);
      const onChange = (event) => setKeyword(event.target.value);
      //[]안의 값이 업데이트 될 때 실행된다
      useEffect(() => {
        console.log("I run only once");
      }, []);
      useEffect(() => {
        console.log("I run when 'keyword' changes.");
      }, [keyword]);
      useEffect(() => {
        console.log("I run when 'counet' changes");
      }, [counter]);
      useEffect(() => {
        console.log("I run when 'keword' & 'counter' changes");
      }, [keyword, counter]);
      useEffect(() => {
        if (keyword !== "" && keyword.length > 5) {
          console.log("SEARCH FOR", keyword);
        }
      }, [keyword]);
      return (
        <div>
          <input
            value={keyword}
            onChange={onChange}
            type="text"
            placeholder="Search here..."
          />
          <h1>{counter}</h1>
          <button onClick={onClick}>click me</button>
        </div>
      );
    }
    
    export default App;

    cleanup

    function Hello() {
      useEffect(function () {
        console.log("hi :)");
        return function () {
          console.log("bye");
        };
      }, []);
      useEffect(() => {
        console.log("hi :)");
        return () => console.log("bye :(");
      }, []);
      return <h1>Hello</h1>;
    }
    function App() {
      const [showing, setShowing] = useState(false);
      const onClick = () => setShowing((prev) => !prev);
      return (
        <div>
          {/*showing이 true경우 Hello컴포넌트 보여주고 false일 경우 null */}
          {showing ? <Hello /> : null}
          <button onClick={onClick}>{showing ? "Hide" : "Show"}</button>
        </div>
      );
    }
    export default App;

    ToDo list

    import React, { useState } from "react";
    
    function App() {
      const [toDo, setToDo] = useState("");
      const [toDos, setToDos] = useState([]);
      const onChange = (event) => setToDo(event.target.value);
      const onSubmit = (event) => {
        event.preventDefault();
        if (toDo === "") {
          return;
        }
        //currentArray의 element를 가져와서 새로운 array를 만들기 위해 ...작성
        //작성했던 todo와 새로 작성한 todo를 합쳐서 array를 생성해준다
        setToDos((currentArray) => [toDo, ...currentArray]);
        setToDo("");
      };
      console.log(toDos);
      return (
        <div>
          <h1>My To Dos ({toDos.length})</h1>
          <form onSubmit={onSubmit}>
            <input
              onChange={onChange}
              value={toDo}
              type="text"
              placeholder="Write your to do..."
            />
            <button>Add To Do</button>
          </form>
          <hr />
          //toDos array를 가져와 각 todo를 의미하는 이름 설정(item)해주고 key값을 입력하기 위해 index를 추가한다
          <ul>
            {toDos.map((item, index) => (
              <li key={index}>{item}</li>
            ))}
          </ul>
        </div>
      );
    }
    export default App;

    Coin Tracker

    import React, { useEffect, useState } from "react";
    
    function App() {
      const [loading, setLoading] = useState(true);
      const [coins, setCoins] = useState([]);
      useEffect(() => {
        //then response를 받아서 reponse.json을 return해준다
        fetch("https://api.coinpaprika.com/v1/tickers")
          .then((response) => response.json())
          .then((json) => {
            // .then((json) => console.log(json));
            // useState추가 후 setCoins json설정
            setCoins(json);
            //setLodaing을 false로 변경해서 loading텍스트가 안 보이게 한다
            setLoading(false);
          });
      }, []);
      return (
        <div>
          <h1>The Coins! {loading ? "" : `(${coins.length})`}</h1>
          {/*로딩이 아닐 경우 표시해준다 */}
          {loading ? (
            <strong>Loading...</strong>
          ) : (
            <select>
              {coins.map((coin, id) => (
                <option key={id}>
                  {coin.name} ({coin.symbol}): ${coin.quotes.USD.price} USD
                </option>
              ))}
            </select>
          )}
        </div>
      );
    }

    Movie App

    import React, { useEffect, useState } from "react";
    
    function App() {
      const [loading, setLoading] = useState(true);
      //기본값을 빈 배열로 설정해준다
      const [movies, setMovies] = useState([]);
      //async-await사용법 좀 더 보편적으로 사용됨
      //getMovies라는 함수생성 async함수가 됨
      //useEffect를 이용해 getMovies호출
      //then을 사용하는 대신에 const response...
      //json 가져와서 await response.json
      //이게 더 보기 좋다고함,
      //밑 버전의 짧은 버전 useEffect부분은 같음
      const getMovies = async () => {
        const json = await (
          await fetch(
            `https://yts.mx/api/v2/list_movies.json?minimum_rating=8.8&sort_by=year`
          )
        ).json();
        setMovies(json.data.movies);
        setLoading(false);
      };
      useEffect(() => {
        getMovies();
      }, []);
    
      // const getMovies = async () => {
      //   const response = await fetch(
      //     `https://yts.mx/api/v2/list_movies.json?minimum_rating=8.5&sort_by=year`
      //   );
      //   const json = await response.json();
      //   setMovies(json.data.movies);
      //   setLoading(false);
      // };
      // useEffect(() => {
      //   getMovies();
      // }, []);
      //일반적 fetch사용
      // useEffect(() => {
      //   //평점이 8.5이상인 영화 url
      //   fetch(
      //     `https://yts.mx/api/v2/list_movies.json?minimum_rating=8.5&sort_by=year`
      //   )
      //     //response를 받아와서 response.json을 return해주고 json을 가져와서 콘솔로 출력
      //     .then((response) => response.json())
      //     // .then((json) => console.log(json));
      //     //console확인후 data있는 부분
      //     .then((json) => {
      //       setMovies(json.data.movies);
      //       //로딩을 끝냈기 때문에 false로 바꿔준다
      //       setLoading(false);
      //     });
      // }, []);
      //movies를 console출력해보면 data를 받아온것을 확인할 수 있다
      // console.log(movies);
      return (
        <div>
          {loading ? (
            <h1>Loading...</h1>
          ) : (
            <div>
              {movies.map((movie) => (
                <div key={movie.id}>
                  <img src={movie.medium_cover_image} />
                  <h2>{movie.title}</h2>
                  <p>{movie.summary}</p>
                  {/*array를 가져올 경우 map을 써준다 g는 사용자설정이름이다 각 genres를 뜻한다 첫번재 argument
                  key값에 g는 고유값이기 때문에 써줄 수 있다
                  */}
                  <ul>
                    {movie.genres.map((g) => (
                      <li key={g}>{g}</li>
                    ))}
                  </ul>
                </div>
              ))}
            </div>
          )}
        </div>
      );
    }
    
    export default App;

    react-router-dom

    npm install react-router-dom 설치

    페이지 이동

    import React, { useEffect, useState } from "react";
    import Movie from "./components/Movie";
    import { BrowserRouter, Routes, Route } from "react-router-dom";
    import Home from "./routes/Home";
    import Detail from "./routes/Detail";
    
    function App() {
      return (
        <BrowserRouter>
          <Routes>
            <Route path="/movie" element={<Detail />} />
            <Route path="/" element={<Home />} />
          </Routes>
        </BrowserRouter>
      );
    }
    
    export default App;

    깃헙 페이지

    설치

    npm i gh-pages

    build-코드를 압축하고 최적화 npm build로 실행시킬 수 있다

    npm build로 실행시킨 후 build폴더가 생성되면 그걸 github pages에 push한다

    push하기 전 package.json에서 

    마지막 부분에 homepage" :https:유저이름.github.io/폴더이름 적어준다

    scripts부분

    추가로 작성해준다 predeploy는 deply실행 전에 먼저 실행된다 npm run deploy하면 predeply가 먼저 실행되어

    npm run build를 실행하게 된다 그리고 react-script 실행 후 다 끝나면 deploy가 실행된다

    deploy는 homepage부분에 적어놓은 웹사이트에 업로드한다

Designed by Tistory.