React JS - 04

2023. 8. 22. 17:58React JS

SMALL

1. react app 만들어서 사용하기

 - 'npx create-react-app 파일명'  명령어를 터미널에 입력하여 react app 을 생성할 수 있음.

더보기

- 위의 명령어로 처음 react app을 생성한 후 'npm start' 명령어를 사용하면 나타나는 첫 화면

 - App.js, index.js 파일 외 다른 파일 모두 제거 

 - 이전에 공부했던 내용 사용해 보기 (useState, onClick)

 - react 는 새로운 값이 변경될 때 변경되는 부부만 그리는데 다시 그릴 때 app 함수의 모든 코드를 한 번씩 실행한 후 바뀐 부분을 수정하는 형식이다.

 - 따라서  useEffect 를 이용해서 처음으로 화면이 그렬질 때 한 번만 실행될 코드를 설정할 수 있다. 

 - [ useEffect (함수, [keyword]) ] - 뒤에 자세히 설명 , 앞의 형식으로 사용 가능하다. 

 오류

더보기

 + 오류발생 : useEffect 는 한 번만 실행되어야하는데 콘솔에 두 번씩 나와서 확인해 보니 index.js 파일에서 <React.StricMode> 로 묶여있는 것이 문제였음. 즉 StricMode 태그는 react 개발환경에서 제공하는 서비스로 개발 단계에서 오류를 잡기 위해 두번씩 실행되는 서비스라고 한다... (구글링해서 찾았슴당)

import Button from "./Button";
import {useEffect, useState} from "react";

function App() {
  const [counter, setCounter] = useState(0); 
  const onClick = () => {setCounter(prev => prev + 1)}
  console.log("i run all time");
//   const runOnlyOnce = () => {
//     console.log("i run only once.");
//   }
//   useEffect(runOnlyOnce, []);
useEffect(()=> {
    console.log("call the api");
}, []);
  return (
    <div>
      <h1>Welcome backk</h1>
      <Button text={"react"}/>
      <button onClick={onClick}>{counter}</button>
    </div>
  );
}

// state 가 변하면 모든 code 가 render 된다. 즉 처음 render 할 때 한번만 코드를 실행하기 위해서 useEffect 를 사용함.
// 예를 들어 api 를 가져와서 보여준 다음에 state가 변할 때마다 같은 api 를 또 가져오는 경우는 필요가 없다.  
// i run all time 이 두 번씩 실행  -> React.StrictMode 를 지우니깐 정상실행 이유는???
export default App;

2. useEffect 사용

 - 위에서 설명했듯이 useEffect 는 처음으로 앱이 render 될 때만 실행되는 함수를 지정하는 기능을 지원한다.

 - 그런데 여기서 특정한 경우에만 실행되는 함수를 지정하는 기능 또한 useEffect를 통해 구현할 수 있다. 

 - [ useEffect (function, [keyword])] : keyword 가 변화할 때마다 실행하는 함수를 지정할 수 있다. 

- 아래 코드에서 input 태그에 작성하는 keyword 가 변화할 때 마다 console에 "search " + keyword 를 출력할 수 있다. 

 - 만약 밑의 버튼이 눌릴 때마다 console 에 출력하고 싶으면 [ keyword, counter ] 로 리스트를 설정해 구현할 수 있다. 

import Button from "./Button";
import {useEffect, useState} from "react";

function App() {
  const [counter, setCounter] = useState(0); 
  const [keyword, setKeyword] = useState("");
  const onClick = () => {setCounter(prev => prev + 1)}
  const onChange = (event) => setKeyword(event.target.value);
  console.log("i run all time");

useEffect(()=> {
    console.log("call the api");
}, []);
useEffect (() => {
  if(keyword != ""){
  console.log("Search ", keyword);
  }
}, [keyword]);
  return (
    <div>
      <h1>Welcome backk</h1>
      <input value={keyword} onChange={onChange} type="text" placeholder="Search here" />
      <button onClick={onClick}>{counter}</button>
    </div>
  );
}

// input 값이 바뀌어 keyword에 저장하는데 변할 때마다 render 하고 있음 따라서 useEffect 를 이용해서 한 번만 수행하도록 하는 것이 좋당~ 
// keyword 를 넘겨주어 keyword 가 변할 때에만 실행되도록 기능 작동 가능
export default App;

 - input 입력창에 작성된 keyword의 값이 5자 이상이면서 빈칸이 아닌 경우 && 버튼을 누를 때 콘솔에 출력되도록 약간 코드를 수정함.

 

3. component create && destroyed

 - 화면에 component 를 조건에 따라 보이게 할수도 있고 안 보이게 설정할 수 있다. 

 - 보이게 할 때는 component 를 생성하는 코드를 실행하는 것과 같다. 

 - 그런데 안보이게 할 때는 생성된 component 를 파괴하는 것으로 component 가 없어질 때도 함수를 실행시킬 수 있다. 

 - [ retrun () => {함수 내용}] : 형식으로 return 함수로 component 가 없어질 때 실행할 수 있다. 

 - 또한 태그 생성 시 prop 을 넘겨주는데 prop 은 특정한 자료형을 가진 데이터들이다. 

 - 이를 제한하기 위해 prop-types 를 이용해 특정 prop 에는 설정한 자료형이 오도록 제한할 수 있다. 

import { func } from "prop-types";
import Button from "./Button";
import {useEffect, useState} from "react";

function Hello() {
  // useEffect(() => {
  //   console.log("created :) ");
  //   return() => console.log("destroyed :(");
  // }, []);

  // function effectFn () {
  //   console.log("created");
  //   return () => console.log("destroyed");x
  // }
  // useEffect(effectFn, []);

  function bye () { console.log("bye");}
  function hi () { console.log("hi"); return bye;}
  useEffect(hi, []);
  return <div>Hello !!</div>
}
function App() {
  const [show, setShow] = useState(false);
  const onClick = () => setShow(current => !current);
  return(
    <div>
      {show ? <Hello /> : null}
      <button onClick={onClick}>{show ? "HIDE" : "SHOW"}</button>
    </div>
  )
} 

// component 가 없어질 때 즉 destroy 될 때 실행할 수 있는 방법 있음.
export default App;

 

일단 이론적으로 공부하는 건 여기까지고 

이후부터 기능을 갖는 react app을 만들예정입니당

 

반응형
LIST

'React JS' 카테고리의 다른 글

React - css 속성 | background 에 이미지 넣기  (0) 2024.01.06
React JS - 05  (0) 2023.08.26
React JS - 03  (0) 2023.08.18
React JS - 02  (0) 2023.08.15
React JS - 01  (0) 2023.08.10