본문 바로가기

22 - 1학기/팀 스터디

[웹 FE 스터디] ReactJS ~ 3.5

TAB 2022 2학기 학회활동 [팀 스터디]

 TIL 포스팅입니다.

작성자 : 40기_박지민


ref. 노마드 코더 React JS로 영화 웹서비스 만들기


▶ReactJS

어플리케이션이 상호작용하기 쉽게 만들어주는 라이브러리

element를 업데이트 할 수 있어 유저에게 보여지는 내용, 즉 HTML을 업데이트 할 수 있다! 

*React-dom : React element를 HTML에 두는 역할. JS로 element를 만들어 역으로 HTML에 삽입시킨다.

                       ∴  앱 실행 시 소스를 보면 작성한 컴포넌트는 보이지 않음

↓  React 사용을 위해 필요한 코드 

<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>

 

 

▶ReactJS로 element 생성

* 잘 쓰이지 않는 방식. 

<html>
	<body>
    	<div id = 'root'></div>
        </body>
        <script>
        	const root = document.getElementById('root');
        	const 원하는 태그명 = React.createElement(
            		'태그명',
            		{class나 property, eventlistner},
            		"content"
            	);
        ReactDOM.render(태그명,root); // 해당 태그가 body의 root자리로.
        </script>
</html>

 

 

▶EventListner 

바닐라JS에서 사용되는 event명 앞에 on을 붙여줘야 ReactJs에게 eventlistner를 생성한다고 알려줄 수 있음

" event명 : () => 함수내용 " 형식으로 작성

 

▶ReactDOM.render()

() 내에 사용자에게 보여줄 내용 작성

ReactDOM.render(넣을 내용, 넣을 위치); 형태.

단, 두 가지 이상을 render하고 싶을 경우

const 변수명 = React.createElement("div",null,[넣을 태그, 넣을 태그]) 코드 추가 후 넣을 내용에 변수명 삽입.

 

▶JSX

JavaScript를 확장한 문법. 

html과 유사한 형태로 작성하나 style 작성 시 중괄호 두 겹을 필요로 한다.

<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<script type="text/babel">
	~JSX 내용~
</script>

위와 같이 JSX를 위한 Js코드 import 후 *type="text/babel"을 추가해줘야 오류 없이 작동한다.

* Babel(코드변환기) 통해 코드를 브라우저가 이해 가능한 형태로 바꿔주는 역할

 

▷ JSX 유무 차이 :

 

◇ JSX 미사용 (createElement 사용)

const h3 = React.createElement(
	"h3",
	{id:'title',onMouseEnter:()=>console.log("mouse enter"),},
	"Hello I'm a title"
);

함수 뒤 : () =>

 

◇ JSX 사용

const Title = (
	<h3 id= "title" onMouseEnter={()=>console.log("mouse enter")}>
		Hello I'm a title
	</h3>
);

 

함수 뒤 = { ()=> }

* " function 함수명(){return( ~ );} " = " const 함수명 = ()=> ( ~ ); "

 

▶State

[웹 FE 스터디] React : 이벤트 ~ 생성 기능 (tistory.com) 기본적인 내용은 해당 링크 참고

해당 포스팅에서는 예제를 통해 State 사용 여부에 따른 코드 차이만 비교

 

◇ State 미사용

<!DOCTYPE html>

<html lang="ko"> 
<head> 
    <meta charset="UTF-8">
    <title>no state</title> 
</head> 
<body> 
    <div id="root"></div> 
</body> 
<script src="https://unpkg.com/react@18/umd/react.production.min.js"></script> 
<script src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script> 
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script> 
<script type="text/babel"> 
        const root = document.getElementById("root");
        let counter = 0;
        function onClick(){ counter = counter + 1; render();}
        function render(){ReactDOM.render(<Container/>,root);
        function Container(){
            return(<div>
            <h3>Total Clicks:{counter}</h3>
            <button onCLick={onClick}>Click me</button></div>);
        }
</script>
</html>

◇State 사용

<!DOCTYPE html>

<html lang="ko"> 
<head> 
    <meta charset="UTF-8"> 
    <title>state</title> 
</head> 
<body> 
    <div id="root"></div> 
</body> 
<script src="https://unpkg.com/react@18/umd/react.production.min.js"></script> 
<script src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script> 
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script> 
<script type="text/babel"> 
    function App() { 
        const [counter,setCounter] = React.useState(0); 
        const onClick = ()=> { setCounter(current => current + 1); } //setCounter(counter+1);도 가능
        return( <div> 
            <h3>Total clicks : {counter}</h3> 
            <button onClick={onClick}>Click me</button> 
            </div> ); 
    } 
    const root = document.querySelector("#root"); 
    ReactDOM.render(<App/>, root); 
</script> 
</html>