Full Stack 교육 회고록

9/26 (오후) 리액트 [JSX문법, React 사용방법, 디렉토리 구조]

순두부 호랑이 2022. 9. 26. 16:52
728x90
SMALL

<ul를 위한 라이브러리, 리액트>

 

리액트란 무엇인가?

자바스크립트 라이브러리 중 하나 사용자의 인터페이스를 만들기 위해 사용됨

 

리액트가 나온이유는?

자바스크립트만으로는 부족하니까!

 

자바스크립트가 가진 단점

1. html과 js가 가진 분리감(관련있는 html, js 문서들을 jsx으로 합쳐준다)

2. 직관적이지만 너무 긴 자바스크립트 문법

3. 새 페이지를 들어갈 때 마다 새로고침 [새로운 페이지나 메뉴를 들어갈 때 새로고침이 되지 않아 사용자의 피로도를 줄여준다 Single Page Application(SPA)]

 

라이브러리

:기능만 가져다 사용하는것! ex)리액트

- 버전이 업데이트 되더라도 이전 버전과 호환이 잘됨!

 

프레임워크

:제공된 틀 안으로 들어가 주어진 규칙을 지켜가며 사용하는 것 ex)앵글러, 뷰...

 

버전이 업데이트 되더라도 이전 버전과 호환이 잘 됨!

 

리액트의 역사: 페이스북의 엔지니어인 'Jordan Walke'가 개발

원활한 커뮤니티 형성>>다양한 문서 제공!

 

리액트의 확장

: 계속해서 상승하는 react의 인기, react native로 모바일 어플리케이션까지 제작 가능!

Single Page Application: 서버로부터 새로운 페이지를 불러 오지 않고 현재의 페이지를 동적으로 다시 작성함으로써 유저와 소통하는 웹사이트

 

새 페이지를 넘어갈 때 마다 정보를 가져오지 않아도 된다 >> 새로고침이 필요 없다!

 

JSX:Javascript에 XML을 추가한 확장문법 하나의 파일에 자바스크립트와 HTML를 동시에 작성한다

        자바스크립트와 html 파일에 분리감이 없기 때문에 가독성이 높고 작성하기 쉽다

JSX: Javascrpt에 XML을 XML을 추가한 확장문법 하나의 파일에 자바스크립트와 HTML를 동시에 작성한다

=> 자바스크립트와 HTML파일에 분리감이 없기 때문에 가독성이 높고 작성하기 쉽다

 

<JSX 문법>

1. 여러 요소가 있다면 반드시 부모요소로 감싸야한다. 이때, 꼭 div 태그가 아니어도 상관 없다(<></>도 가능)

2. 표현식 사용 가능( JSX 내부에서 JS 표현식이 가능하다. 단, 표현식 내부에서 if문 사용 불가능!/ 삼항연사자로 대체 가능!

3. 리액트에서는 class 대신 className을 사용, 삼항연산자로 대체 가능!

4. 스타일링 적용 시, 객체 형태로 삽입

 

 

<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" />
    <meta
      name="description"
      content="Web site created using create-react-app"
    />
    <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
   
    <link rel="manifest" href="%PUBLIC_URL%/manifest.json" />

    <title>React App</title>
  </head>
  <body>
    <noscript>You need to enable JavaScript to run this app.</noscript>
    <div id="root"></div>
 
  </body>
</html>

<index.js>

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';

//만약, 전에 했던 코드로 돌아가고 싶다면
// AppExample -> App으로 변경
import App from './AppExample';
import reportWebVitals from './reportWebVitals';

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();

<App.js>

import './App.css'
function App() {

  // JSX: 하나의 파일 안에 HTML과 JS를 동시에 저장 => 가독성이 좋고 작성이 쉬움, 기능 분류 쉽다

  //(1) 여러 요소가 있다면 반드시 하나의 부모요소로 감싸줄 것
  //   이때, 꼭 div 태그가 아니여도 가능! (<> </> -> 가능)

  //(2) 표현식이 사용 가능
  // 만약, return()안에서 JS 문법을 사용하려면? {} 안에 작성
  // (단, if문은 사용 불가)

  // 만약, 조건이 하나라면 &&연산자 (2-2 참고)
  //      조건이 true/false 두개라면 삼항연산자(2-1참고)
  //      조건이 3개 이상 다중이라면 return()위에서 if 문 사용

  let name = '홍길동'
  let state = 'closed'

  // (3) 기존 문법과 다른 점들!
  //     class대신 className 사용
  //     태그를 사용할 때, 소문자만 사용할 것
  //     ** 대문자는 컴포넌트 이름으로 사용해야 함
  //     끝태그 생략 불가! (content가 없더라도)

  //(4) 스타일링 적용이 가능
  // (4-1) 객체 형태로 삽입
  const welStyle={
    fontSize: '50px',
    color:'blue',
    backgroundColor:'yellow'
  }

  // (4-2) css 형태로 삽입
  // import 되어있는 css에 작성

  return (
    <div>
    <div className="App" style={welStyle}>

      {/* (2-1) 삼항연산자 이용 */}
      {name ==='홍길동'? <p>{name}의 홈페이지에 오신 것을 환영합니다!</p>: <p>{name}님 다음 기회에 찾아와주세요...</p> }
      
      {/* (2-2)&&연산자 이용 */}
      {state === 'open' && <p>열려있어요!반갑습니다!</p>}

    </div>

    <div style={welStyle}>환영합니다</div>
    </div>

  );
}

export default App;

<app.css>

body{
  background-color: gray;
}

 

 

 

만약, 내가 다시 서버를 키고싶다면?
Alt L O 는 라이브서버이다이제 사용 안함!!!!!!

cmd 로 돌아가서 ctrl+C로 기존에하던 작업을 멈추고 다시 npm start 로 서버를 킨다!

 


React 사용 준비

1. Node 설치 및 노드 버전 확인

   - 노드는 LTS 버전

   - 노드가 설치됐는지 확인은 cmd 창에 node(띄어쓰기) -v 검색

   - npm -v => 설치 여부 확인

 

2. 폴더 생성

    - 원하는 위치에 폴더를 생성(커다란 작업 환경이 될 공간)

# cd : change directory 
cd react-app 

- 내가 만든 React 폴더 위에 주소 클릭해서 경로 따내기

  윈도우+R =>cmd

   => cd 컨트롤브이

 

3. react app 생성

# npx : npm을 실행하는 모듈 
npx create-react-app 'project01'

4. 폴더 재설정

 

cd project01 

5. 코드 시작

code .

6. React 사용

npm start

 

<총정리>

*** cmd. 터미널

cd: change directory 경로 이동

- cd + 내가 실행하길 원하는 폴더의 경로

- cd.. : 상위 폴더

** directory에 json이 없는것 같은데? => 경로설정 오류

 

-vscode 코드를 실행 : code .

- 브라우저창을 실행 : npm start

 

만약에! 코드를 다시 키고 싶은데 cmd에 입력창이 없다면?

- 실행 취소: ctrl+c

 

// React 

- Single Page Application (SPA) -> 새로 고침이 없음

- JSX : HTML + JS

                (1)class => className

                      홀태그? => 사용불가, 끝태그 꼭 닫아줘야 함!

                      대문자? 소문자? => 소문자만 사용할 수 있음

                (2) 여러 요소가 있다면 반드시 커다란 하나의 요소로 감싸야 함

                (3) 표현식 사용 가능

                                  => return ()안에 JS문법을 쓸 때 {}

                       

                                     if문 사용 불가

                                       => 삼항 연산자

                                       => &&연산자

               (4) 스타일링

                          4-1) 객체 형태로 - camel Case

                          4-2) css연결: import

function AppExample(){

    // 1. 사용자에게 이름을 입력받아준다
    // prompt ('이름을 말해주세요!')
    let name = prompt('이름을 입력하세요')

    // 2. 현재 날짜를 가지고 올 것 
    // 현재 몇월? getMonth()
    let today = new Date()
    let date = today.toLocaleDateString()
    console.log('오늘의 날짜는',date)

    let month = today.getMonth()+1
    console.log('이번 달은',month)

    //3.
    // 조건1) 3~5월 : 봄
    // 조건2) 6~8월 : 여름
    // 조건3) 9~11월 : 가을
    // 조건4) 12,1,2월 : 겨울

    let season = ''
    if(month >=3 && month <=5){
        season='봄'
    } else if(month >=6 && month <=8){
        season='여름'
    } else if(month>=9 && month <=11){
        season='가을'
    } else {
        season='겨울'
    }

    console.log('현재의 계절은', season)

    //결과창
    //2022.9.27
    //<hr></hr>
    //000님 지금은 가을입니다. 좋은 하루보내세요!
    return(
        <>
        <h1>{date}</h1>
        <hr/>
        <h4>{name}님 지금은 {season}입니다. 좋은 하루 보내세요!</h4>
        </>
    )
}

export default AppExample;

  

728x90
LIST