[Web KIT640] Day 14. React 컴포넌트 및 State

vinca·2023년 2월 13일
0

🍉 Web Frontend

목록 보기
17/22
post-thumbnail

정리

Danfo.js

  • csv 데이터를 쉽게 다룰 수 있도록 해주는 툴
  • python의 numpy나 pandas를 생각하면 된다.
  • javascript언어를 통해 작성한다.
  • node/react/browser에 모두 사용할 수 있다.

간단한 예제를 보자.

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://cdn.jsdelivr.net/npm/danfojs@1.1.2/lib/bundle.min.js"></script>
</head>

<body>

    <script>

      //danfo is exposed on dfd namespace 
      s = new dfd.Series([1,2,3,4,5]) 
	  s.print()	
    </script>

</body>

</html>

danfo.js 공식 홈페이지

chart.js

chart.js 공식 홈페이지

데이터를 차트 형식으로 시각적으로 표현 가능하다.

예제

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
    <title>Document</title>


</head>
<body>
    <div>
        <canvas id="myChart"></canvas>
      </div>

      <script>
        const ctx = document.getElementById('myChart');
      
        new Chart(ctx, {
          type: 'bar',
          data: {
            labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
            datasets: [{
              label: '# of Votes',
              data: [15, 19, 15, 14, 13, 12],
              borderWidth: 1,
              backgroundColor: ["red", "green", "blue", "pink", "white", "purple"]
            }]

            
          },
          options: {
            scales: {
              y: {
                beginAtZero: true
              }
            }
          }
        });
      </script>
</body>
</html>

React!

  • React는 SPA 기반 WEB UI(User Interface) 구성을 위한 Javascript 라이브러리.
  • 재사용 가능한 UI 컴포넌트 생성. (사용법이 쉬움)
  • HTML UI 컴포넌트 = HTML + CSS + Javascript를 하나로.
  • 기존 HTML 화면을 어떻게 React 컴포넌트로 분리 하느냐가 관건.

기본적으로 node.js가 설치된 상황에서 동작한다.

// 디렉토리 my-react-app을 생성 후 그 안에 설치
npx create-react-app my-react-app
// 현재 디렉토리에 그대로 설치
npx create-react-app .

설치를 완료하면 다음과 같이 실행시켜주도록 하자.

npm start

빌드

빌드를 통해서 압축된 형태로 보낼 수 있다.
압축되었기에, 부하가 더 낮게 실행시킬 수 있다.

npm run build

빌드된 파일을 실행하려면 다음 명령어를 사용한다.

npx serve -s build

컴포넌트

정말 중요한 점은 대문자로 해야한다는 것이다.
소문자로 정의해뒀다가, 고생 꽤나 했다..

react 컴포넌트를 생성시 클래스 형태와 function형태 두가지로 생성 가능하다.

함수형태로 정의하는 것이 더 간단하기에 주로 사용된다.

객체를 찍어내는 생성자라고 생각하면 편하다.

React props 사용

컴포넌트를 생성(호출) 시, props를 통해 값을 전달하고 이를 사용할 수 있다.

// Car 객체를 생성
<Car brand="현대" name="sonata"></Car>  

객체를 생성할 때 설정한 속성은 props로 전달되게 된다.

아래 예제를 보자.

위와 아래 둘다 동일하며 ES6를 이용해서 더 짧게 정의했다.

기본 형태

function Car(props) {
  return <h1>I am a function {props.brand}</h1>
}

ES6 형태

const Car = (props)=> <h1>I am a const in {props.brand}</h1>

호출(생성)하는 부분

function App()
{
      <div>
        <Car brand="현대"></Car>      
      </div>
}
export default App;

결과

구조분해 할당

굳이 props 객체로 받아 접근하지 않고, 생성 시 전달된 값을 그대로 사용할 수 있다.
즉, 구조를 분해해서 받아오는 것이다.

// 기존 props 형태로 받아옴
const Car = (props)=> <h1>I am a const in {props.brand}</h1>

// 구조 분해 할당
function Car_distribute({brand}){
  return <h1>I am a 구조분해 할당 {brand}</h1>
}

      <div>
        <Car brand="현대" name="sonata"></Car>
        <Car_distribute brand="현대"></Car_distribute>       
      </div>

State

state는 (함수 내에 선언된 변수처럼) 컴포넌트 안에서 관리되는 객체이다.

App.js의 기본인 function App() 자체가 하나의 컴포넌트 이므로 "컴포넌트 안" 이라고 했지만, 사실 상 소스코드 내 선언된 변수라고 생각해도 무방하다.

컴포넌트 내 값을 변경할 수 있는 변수자동적으로 랜더링 된다.

왜 쓰는데?

그럼 왜 그냥 변수를 선언해서 쓰지 이런 State를 사용한 방법을 쓸까?

바로 값이 변경되었을 때를 이를 통해 랜더링 되는 React의 특징 때문이다.

즉, State내 정의하는 함수를 실행시켜 값을 변경함으로써 명시적으로 랜더링 시킬 수 있다.

예제

이런식으로 선언된다.
[변수 명, 변경 때 호출할 함수 명] = useState(초기 값)

그 아래 return 부분에는 다음과 같이 정의된다.

저렇게 function() {}으로 정의해도 되고, () => 와 같이 ES6 연산자를 사용해도 된다.

결과

약간의 재미를 위해 버튼을 하나 더 추가하고, State에 배열을 넣어 사용했다.

외부에 컴포넌트 정의

컴포넌트를 하나의 소스코드에 전체를 정의해 두다 보니 APP.js의 메인 소스코드가 너무나 복잡해 보인다.

따라서 다음과 같이 컴포넌트의 코드만 밖으로 따로 빼낼 수 있다.

이때 반드시 따로 빼낸 컴포넌트.js 파일에는 마지막에 export를 해주어야 모듈로 사용이 가능하다.

이제 따로 빼낸 컴포넌트를 import 구문을 통해 다시 APP.js로 불러오면 된다.

팁✅ 메인이 되는 APP.js파일에서 따로 빼낸 컴포넌트 클래스의 이름을 드래그 후 ctrl + space를 통해서 바로 import구문을 정의할 수 있다.

결과

잘 되는 것을 확인할 수 있다.

React strict mode

  • strict mode란 App 내의 잠재적인 문제를 알아내기 위한 도구이다.
  • 이를 사용하면 랜더링이 항상 2번씩 발생한다.

codesandbox

편하게 콤포넌트들을 배치할 수 있다.

profile
붉은 배 오색 딱다구리 개발자 🦃Cloud & DevOps

0개의 댓글