자바스크립트/리액트

리액트를 사용하는 이유

길용쓰 2023. 1. 6. 04:22

리액트는 자바스크립트를 사용하는 프론트엔드 '라이브러리'이다

프레임워크가 아닌 라이브러인만큼, 새로운 무언가를 배운다기보단 자바스크립트를 복습하는 느낌이었고

그냥 자바스크립트로도 될텐데 왜 리액트를 써야하지? 라는 의문이 들었다.

 

그렇기에, 일단은 왜 리액트를 써야 하는지에 대해 정리해두는게 좋을 것 같아 이 글을 준비했다'

 

 

 

 

 

 

1)데이터 바인딩이 쉬움

데이터 바인딩: 화면에 출력되는 데이터와 메모리의 데이터를 일치시키는 과정

= 서버에서 가져온 데이터를 사용자에게 보여주는 것

 

let newData = "새로운 데이터"

document.getElementById.innerHTML = newData; //자바 스크립트

<h1> { newData } </h1>;  //리액트

기존의 javascript에선와 getElementById로 HTML의 내부 값을 변경시켰다면

리액트에선 그냥 HTML 내부의 변수를 { }로 감싸면 된다

=> 위와 같이 HTML에 JS 객체를 내장한 컴포넌트를 JSX라고 함

 

 

 

 

하지만 실제로 사용해보면 변수 값을 변화시켜도 출력 값이 변하지 않는 것을 볼 수 있는데,

import React, { useState } from 'react';

const [char, func1] = useState('사과');
const [arr, func2] = useState(['사과','바나나']);
//arr='사과바나나', arr[0]='사과', arr[1]='바나나]

<span onClick={ ()=>{func1(char + ' 할인')} }> 버튼 </span>

변수가 아닌 state를 사용해야 값이 변경될시 자동으로 재렌더링된다.

그렇기에 빠르고 부드러운 느낌을 주어 뛰어난 UX를 제공 가능하며,

많은 상호작용을 요구하는 동적인 웹, web app을 구현하는데 탁월하다.

 

useState로 state를 생성하면 input 값을 저장중인 state와 이를 수정 가능한 함수 1개를 return하며,

state는 해당 함수로만 수정될 때 자동으로 재렌더링 된다.

*그렇기에 다른 방법으로 수정되지 않도록 let이 아닌 const로 선언한다

 

function 내용수정(){
  var newArray = [...arr];
  newArray[0] = '키위';
  func2( newArray );
}

state의 값을 일부만 수정할 때엔 기존의 값을 hard copy하여 배열 변수를 만들고

이의 내용을 수정해 state 변경 함수에 input으로 넣는 방식이 편하다.

[arr] = hard copy  //  ... = split

 

 

 

 

 

2)컴포넌트

function Component(){
  return(
    <div className="component">
      <h1>내용</h1>
    </div>
  );
}


<Component /> //이걸 HTML 파트에서 변수처럼 사용

html 코드 블럭을 함수나 클래스로 만들어 변수처럼 사용 가능하다.

위와같이 코드 블럭을 만들어 조립하듯이 개발하면 코드 재사용에 용이하다.

 

function App() {
  return (
    <div>
      <Header />
      <Main name="갓대희" color="blue"/>
      <Footer />
    </div>
  );
}
function Main(props) {
    return (
        <div>
            <main>
                <h1 style={{color: props.color}}>안녕하세요. {props.name} 입니다.</h1>
            </main>
        </div>
    );
}

 

상위 component의 state와 같은 값은 프로퍼티(props)를 통해 전달된다.

하위 component에선 이를 수정할 수 없으며, 그렇기에 리액트는 단반향 데이터 흐름을 갖는다.

(리스너로 수정이 가능하긴 하다. 이를 state 끌어 올리기라고 한다)

 

 

 

 

3) Virtual Dom을 통한 재조정 (Reconcilation)

기존의 웹사이트는 html을 파싱하여 DOM tree를 만들고,

css와 결합하여 렌더링 트리를 만들어 사용자에게 보여줬다

-> DOM을 조작하면 새롭게 렌더링 트리를 만들어야 하므로 overhead가 크다

 

그렇기에 가상 DOM을 만들어 수정사항을 전부 적용시킨 다음

최종본만을 실제 DOM에 반영시켜 렌더링하는 virtual dom이란 아이디어가 등장했고,

리액트는 이 가상 DOM을 활용해 데이터가 수정될 때 마다 아예 DOM을 새로 그려버리는 것으로

데이터의 흐름과 연관된 버그를 방지하고, 좀 더 선언적인 프로그래밍이 가능하도록 한다.

 

 

 

 

https://www.youtube.com/watch?v=LclObYwGj90&list=PLfLgtT94nNq1e6tr4sm2eH6ZZC2jcqGOy 

리액트를 왜 써야하는가? 라는 나의 니즈에 완벽하게 부합했던 강의

뒷부분은 유료던데 한번 들어볼까

 

https://goddaehee.tistory.com/300

 

[React] 4. React 컴포넌트(2) - 프로퍼티(props)란?

4. React 컴포넌트(2) - 프로퍼티(props)란? 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ React 컴포넌트 내용 중 프로퍼티(props)에 대한 내용 ] 입니다. : ) 간단??? 하게 프로퍼티의 사용 방법을 알아 보

goddaehee.tistory.com

프로퍼티 예제

 

https://gitnyang.tistory.com/67

 

[React] 양방향/단방향 바인딩, 부모 컴포넌트의 state 바꾸기

↔ 양방향 바인딩? 양방향 데이터 바인딩에서는 부모 컴포넌트와 자식 컴포넌트 간에 데이터가 서로 양방향으로 흐른다. 부모와 자식 모두 데이터를 직접 변경할 수 있다. model(JavaScript)과 view(HTM

gitnyang.tistory.com

끌어올리기 관련

 

https://velopert.com/3236

 

[번역] 리액트에 대해서 그 누구도 제대로 설명하기 어려운 것 – 왜 Virtual DOM 인가? | VELOPERT.LOG

리액트를 지난 2년간 사용하면서도 막상 말끔하게 설명하라고 하면 어려웠던 주제, 원래 번역글은 잘 안쓰지만 글 자체가 구성이 잘 되어있어서 글을 번역해보았습니다. 원본: https://hashnode.com/p

velopert.com

가상 DOM 개념

 

https://velog.io/@woohm402/virtual-dom-and-react

 

React 가 Virtual DOM 을 사용하는 이유

React 를 공부할 때 맨 처음 나오는 개념들 중 Virtual DOM 이라는 친구가 있습니다. 많은 자료들에서 Virtual DOM이 성능이 좋고 그런 이야기를 하는데, 이게 진짜인지, 정확히 어떤 말인지 알아보겠습

velog.io

리액트의 가상 DOM 활용법