React

[React] react 다시 해보기

쿨키드 2022. 9. 20. 23:04
react 다시 해보기

리액트는 함수 덩어리 = 함수를 알아야함
변수를 일반적으로 선언해서 쓰지 않고, state에 담아서 사용

 

 


Next.js
html -> 모듈
js ->jsx(: JavaScript를 확장한 문법입니다. UI가 어떻게 생겨야 하는지 설명하기 위해 React와 함께 사용할 것을 권장)
css는 리액트에서 쓰는 방법이 조금 달라지는.//모듈 또는 스타일드컴포넌트 sass
멀티페이지라는 개념
 
리액트 깔아서 컴포넌트 만들기
class를 만들어서 붙였다~뗐다~
to do list

 

import React from 'react'; 
import ReactDOM from 'react-dom/client'; 
import App from './App'; 
const root = ReactDOM.createRoot(document.getElementById('root')); 
📌 index.js에서 getElementById('root')에서 root부분을 수정하게 되면,
root.render( 
  <React.StrictMode> 
    <App /> 
  </React.StrictMode> 
);


📌 리액트 public의 index.html에서 

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8" />
  <link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <meta name="theme-color" content="#000000" />
  <title>React App</title>
</head>
<body>
  <div id="root"></div> 👉 수정해줘야함
</body>
</html>

 

const App = function () {
  return <i>
    002
  </i>
}
export default App;

👉 함수표현식. 변수에 담아서 사용

 

 

리액트에서 컴포넌트 자체는 태그가 아님.

function Home() {
  return <i>HOME</i>
}
const App = () => {
  return <p>
    <Home />
  </p>
}
export default App;
const Home = () => {
  return <div>00700</div>
}
const App = () => {
  return <p>
    <Home />
  </p>
}
export default App;

const App = () => {
  const Home = () => {
    return <div>00700</div>
  }
  const a = 'A';
  return <p>
    {a : 변수} a
    <Home />
  </p>
}
export default App;

 

리액트에서는 이렇게 쓰지 말것
👉 addEventListener는 DOM을 직접 조작하는 것이기 때문
const App = () => { 
  let num = 1; 
  document.querySelector('button').addEventListener('click', function () { 
    return num = num + 1 
  }) 
  return ( 
    <> 
      {num} 
      <p>111</p> 
      <div>00700</div> 
      <button>PUSH</button> 
    </> 
  ) 
} 
export default App;




👉 이런식으로 작성해야함
const App = () => { 
  let num = 1; 
  return ( 
    <> 
      {num} 
      <p>111</p> 
      <div>00700</div> 
      <button onClick={ 
        () => { 
          num = num + 1, 
          console.log(num) 
        } 
      }>PUSH</button> 
    </> 
  ) 
} 
export default App;​

 

🟣 state가 바뀌면 리액트는 함수를 다시 호출해서 변화된 거를 html로 전달
👇 리액트 콘솔을 찍으면 같은 내용이 2번 찍히는데, 밑에 있는 이 태그때문. 삭제하면 하나만 찍힘 근데 삭제 안 하는게 좋음
<React.StrictMode>
    <App />
  </React.StrictMode>
import { useRef, useState } from "react";
const App = () => {
  const [num, setNum] = useState(1);
👉 값을 받아서 전달하는 식
  const link = useRef(1); // useRef: 리렌더링 하지 않는다. 컴포넌트의 속성만 조회&수정
  console.log(num)
  console.log('App')
  return (
    <>
      {num} {link.current}
      <p>111</p>
      <div>00700</div>
      {console.log(num, link.current)}
      <button onClick={
        () => {
          //setNum(num + 1),
👉 ;이 아닌 , 인 이유 : 화살표 함수 안에 함수가 2개 실행되면 수미표를 사용
{}는 return이 필요 // ()는 return이 필요 없음
          console.log(num),
            link.current = link.current + 1;
          console.log(link.current)
        }
      }>PUSH</button>
    </>
  )
}
export default App;

 

🔵switch를 해본다

  const [true, setTrue] = useState(true)
👉 true는 예약어(function, this, object 같은 게 예약어)​

 

✔리액트에 삼항연산자는 가능하나, if문은 no

{toggle ? 'loading...' : <Test />}
👉 외부에서 데이터를 받을 때, 배열로 받는데(배열로 안 오면 배열로 바꿈) 데이터가 클 수 있음. 로드되면 안될 때 사용하는{