클라우드 스쿨/강의 정리

5주차 - React

qqlzzb 2023. 11. 21. 15:31
기간 230607 - 230609
배운 내용 React

 

◎ React

1. 리액트의 특징

어떤 태그를 쓰든 전체를 감싸는 태그(root)가 필요

그냥 <> </>도 가능

시작 태그와 종료 태그를 반드시 작성해야 한다
html에선 <br> 같은 거 가능했지만 무조건 <a> </a> 또는 <a/>로 사용해야 함(=xml의 특징)

class 말고 className이라고 써야 함

소괄호는 리턴 포함. 리턴으로 끝나면 대괄호 리턴
리턴 안 할 땐 소괄호 사용불가

 

2. 커스텀 태그(컴포넌트)


커스텀 태그 만들어줌
대문자로 시작하면 리액트의 컴포넌트
<Header></Header>  == <header> ~~~~ <header>

 

리액트 사용해서 커스텀 태그 만들어 쓰면 재사용 가능, 유지보수하기 좋음(여러 코드에 한 번에 변경사항 적용 가능)
리액트로 만든 페이지는 컴포넌트 단위로 이루어져 있다.

 

- 컴포넌트 생성

src/component/Hello.js 생성 후,

export default function Hello(){
    return (
        <div> <h1>Hello</h1> </div>
    )
}

 

App.js에서 아래와 같이 사용 가능

import './App.css';
import Hello  from './component/Hello';

function App() {
  return (
    <div className="App">
        <Hello/> 
    </div>
  );
}
export default App;

 

- 주의할 점

  • 컴포넌트 이름은 반드시 대문자로 시작
  • 컴포넌트에서 JSX 리턴 시에는 반드시 하나의 태그로 전체를 감싸서 리턴
    • OK return ( <div> <div></div> </div> )
    • 오류 return ( <div> </div><div> </div> )
  • react에서 html 태그는 반드시 소문자로

 

3. State

- State 객체의 값이 변경되어도 화면 갱신이 안 되는 사례
obj = {id:1, name:"kim"}
obj.name = "lee"; < - 이렇게 변경 후
setObj(obj) 하면 obj.name은 그대로 kim

왜냐하면
객체는 주소 저장
주소가 가리키는 곳에서는 name이 변했지만 주소는 그대로
setObj 입장에서는 변한 것이 없으므로, 화면을 refresh 하지 않음
(주소가 저장한 것은 변했지만 주소가 변하지 않아서)

=> 변경하려면 객체를 새로 만들어야 함

import { useState } from "react" ; 

export default function Hello() {
   const [user, setUser] = useState({id:1,name:"kim"}) ;
   function test(){
      user.name="lee"; 
      setUser(user);// 화면 갱신 안됨
      
      // 아래와 같이 수정하면 화면이 갱신됨
      // let NewUser = {...user, name:"lee"};  // 새로운 객체 생성
      // setUser(NewUser); 

   }
   return (
      <button onClick={test}>{user.name} </button>
   )
}

 


 

5주차는 연휴로 인해 수업일수가 적고, react 수업은 대부분 실습이었기 때문에 포스팅할 내용이 별로 없습니다..

'클라우드 스쿨 > 강의 정리' 카테고리의 다른 글

7주차 - JAVA  (0) 2023.11.23
6주차 - JAVA  (0) 2023.11.22
4주차 - Node.js  (0) 2023.11.20
3주차 - AWS, Node.js  (0) 2023.11.19
2주차 - CSS, JavaScript  (0) 2023.11.17