본문 바로가기

Study/Code

[React] react for beginner

- React JS 설치를 위한 Javascript 코드 Url

 

https://unpkg.com/react@17.0.2/umd/react.production.min.js
https://unpkg.com/react-dom@17.0.2/umd/react-dom.production.min.js

 

<script src="https://unpkg.com/react@17.0.2/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@17.0.2/umd/react-dom.production.min.js"></script>

 

React JShtml코드를 직접 작성하지 않고 그 대신, javascript코드를 사용한다.

JavascriptReact JS를 이용하여 element를 생성한다.

 


 

- React JS element를 어떻게 생성하는가?

 

Reactimport했다는 가정하에 (위의 URL 참고)

const span =React.createElement("span");

createElement function을 가진 React object에 접근 가능. (예로써, "span")

 

 

- 다음으로, 어떻게 body 안에 React element를 가져다 둘 수 있는가?

‘React-dom’을 사용해야 한다.

 

React JS는 어플리케이션이 아주 interactive하도록 만들어주는 library이고,

React-domlibrary, 또는 package인데 모든  React element들을 HTML body에 둘 수 있도록 해준다.

 

ReactDOM.render(span,root);

 

render의 의미는 React element를 가지고 HTML로 만들어 배치한다는 것이다. ( render의 의미 == 사용자에게 보여준다’)

( )안에 무엇(span)render 할 것인지, span을 어디에(root) 둘 것인지를 reactDom에게 알려주어야 한다.

 

이를위해, <body></body>안에 id=rootdiv요소를 만들었고,

<div id="root"></div>

 

이를 읽기위해, #rootjs로 불러왔다.

<script>
const root =document.querySelector("#root");
</script>

 

정리하면,

const span =React.createElement("span"); //이 코드로 element를 만들고,

  ReactDOM.render(span,root); //이걸로 root안에 넣었다.

 

interactive한 어플리케이션에서 하는 작업은 결국 event들을 감지하는 일인데, addEventListener를 반복하는 것 대신에 property에서 event를 등록할 수 있다

React.createElement("span", {span의 property}, “span의 content”)
// property는 class name, id, style 등 가능하다.

 

- 참고

react18에서는 ReactDOM.createRoot(root).render(span); 이렇게 사용합니다.
17버전 - ReactDOM.render(span, root)

 

 

위 예제를 통해 알 수 있는 것은

JavascriptReact JS를 사용하여 element를 생성할 때에는, React JSelement를 생성한다.  React JS는 업데이트가 필요한 element를 업데이트한다. 이는 React JS가 결과물인 HTML 을 업데이트할 수 있다는 것을 의미한다.

---> React JS는 유저에게 보여질 내용을 컨트롤 할 수 있다는 뜻이다.

 

더보기
더보기

바닐라JSHTML -> JS 순서
리액트는 JS -> HTML 순서

 

React JSelement를 생성하는 위의 방식은 개발자들이 잘 쓰지 않는 방식이다. element를 생성하는 다른 방식이 존재한다. 그러나 이 방법을 이해해야 할 필요는 있다. React JS의 본질을 이해할 수 있을 것!

 


 

 

- React element를 생성하는 더 편리한 방법을 알아보자.

BabelJSXReact.createElement() 호출로 컴파일한다. 

, BabelJSX로 적은 코드를 브라우저가 이해할 수 있는 형태로 바꿔준다.

 

다음 두 예시는 동일합니다. (- JSX , 아래 - JSXBabel이 변환한 코드)  

const element = ( <h1 className="greeting">Hello, world! </h1> );
const element =React.createElement('h1', {className: 'greeting'}, 'Hello, world!' );

 

주의! JSX는 HTML보다는 JavaScript에 가깝기 때문에, React DOM은 HTML 어트리뷰트 이름 대신 camelCase 프로퍼티 명명 규칙을 사용합니다. 예를 들어, JSX에서 classclassName가 되고 tabindex는 tabIndex가 됩니다.

 


 

 

- 컴포넌트를 다른 컴포넌트에 안에 넣었다.

기억할 점은, 직접 만든 컴포넌트를 렌더링해서 다른 곳에서 사용할 때는 항상 대문자로 시작해야 한다

<script>
    const Title = () =>(
        <h3 
        id="title" 
        onMouseEnter={() =>console.log("mouse enter")}
        > 
        Hello I'm a title
        </h3>
      );
      const Container = () =>(<div> <Title/> </div>);   
      // div태그를 렌더링하고 있는 컴포넌트가 하나있는데, Title에 관련된 코드를 포함시키고 있는 것.
</script>

 

 

- 그렇다면 React Element를 함수안에 왜 담는가무슨 이점이 있어서?

React Element를 함수 내에 담으면 원하는 만큼 사용할 수 있게 된다.

<div> <Title/> </div>

Title이라는 함수는 h3 React Element를 반환하고 있고,

<Title/><Title/><Title/> 
//이를 원하는 만큼 사용할 수 있게 된다.

 

함수의 형태이기 때문이고, 동일한 코드를 재사용할 수 있는 방법이다.