본문 바로가기
ReactJS/Nomad Coders

[영화 웹 서비스]The Basics of React

by sum_mit45 2022. 3. 16.
728x90
반응형

react js vs vanilla js

- reactjs는 UI를 interactive 하게 만든다(=웹사이트에 interactivity를 만들어준다)

 

- 화면에 버튼 하나와 텍스트 하나

- 버튼을 클릭할 때마다 화면의 텍스트를 업데이트(클릭 수를 센다)

- reactjs는 UI에서 바뀐 부분만 업데이트 해준다, 이전에 렌더링된 컴포넌트는 어떤 거였는지 확인, 그리고 다음에 렌더링될 컴포넌트는 어떤거지를 보고, "다른 부분"만 파악한다. 여러가지 요소를 리렌더링하려고 해도 전부 다 새로 생성죄지는 않는다 (콘솔 창에서 확인해 볼 수 있음, vanillajs에서는 모든 부분이 업데이트)

 

1. 바닐라JS앱

- document.getElementById나 querySelector를 이용해서 그 버튼을 찾는다

- 그 다음으로 button.addEventListener를 하고 function을 실행한다

 

: Html을 먼저 만들고 Javascript로 가져와서 Html을 수정하는 방식

-html을 만들고, 찾아서 js로 가져오고 업데이트하고 다시 js로 보낸다.

 

<!DOCTYPE html>
<html>
    <body>
        <span>Total clicks: </span>
        <button id="btn">Click me</button>
    </body>
    <script>
        let counter =0;
        const button = document.getElementById("btn"); // btn id를 가진 값 불러오기
        const span = document.querySelector("span");
        function handleClick(){
            counter = counter+1;
            span.innerText = `Total clicks: ${counter}`;
        }
        button.addEventListener("click", handleClick);
    </script>
</html>

 

 

2. Reactjs

: 모든 것이 Javascript로 시작해서 Html이 되는 방식

 

-reactjs는 업데이트가 필요한 element를 업데이트한다(?) -> reactjs가 바로 결과물인 html을 업데이트 할 수 있다. 

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

- reactjs에 "값이 바뀔 데이터"를 사용하고자 한다 -> state 

- 함수(컴포넌트)에 state 더하기

 

<!DOCTYPE html>
<html>
    <body>
        <div id="root"></div>
    </body>
    <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>
    <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(counter+1);
            };
            return (
                <div>
                    <h3>Total clicks: {counter}</h3>
                    <button onClick={onClick}>Click me</button>
                </div>
            );
        }
        ReactDOM.render(<App/ >, root);
    </script>
</html>

 

 

html에서 reactjs, reactdom 사용하기

1. html코드

<!DOCTYPE html>
<html>
    <body></body>
    <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>
</html>

 

2. console에서 확인하기

- console창에 React라고 쳤을 때, 다음과 같이 나오면 제대로 작동 중

제대로 작동하는 모습

 

Reactjs 

- html을 사용하지 않고, javascript를 사용

Element 생성

1. React.createElement();

-개발자들이 작업하는 방식X

 

1) reactjs로 element 생성

React.createElement("생성하고자 하는 HTML tag", {props의 object}, "tag의 content");

- props의 object에 들어갈 수 있는 것은 tag의 property와 event listener

 

2) html의 body에 react element 가져오기 -> Reactdom 사용

- reactjs는 어플리케이션이 interactive하도록 만들어주는 library

- react-dom은 library 또는 package, 모든 react element를 html body에 둘 수 있도록 한다

ReactdDOM.render(html에 보이고자 하는 변수 이름,html에 있는 id이름 ); 

render는 react element를 가지고 html로 만들어 배치한다는 것-> 사용자에게 보여짐

js에서 &amp;amp;amp;amp;lt;span&amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;/span&amp;amp;amp;amp;gt;태그를 만들어 넣은 모습

 

 

3) 여러가지 변수들을 하나의 html tag에 넣고 싶을 때

- 새로운 <div> 태그를 가지는 변수를 만들어서 content 부분에 [여러 변수이름] 으로 해주면 된다.

const container = React.createElement("div", null, [xxx,yyy,zzz]);

ReactDOM.render(container, html 에 있는 id이름);

 

4) 2번째 매개변수(property)에 tag 속성 뿐만 아니라 event listener 등록 가능

onClick, onMouseEnter 등등 

 

 

2. JSX

- 개발자들이 작업하는 방식

- JavaScript를 확장한 문법

- HTML에서 사용한 문법과 흡사한 문법을 사용해서 React 요소를 만들 수 있다.

 

(before)

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

(after)

const title = <h3 id="title" onMouseEnter={() => console.log('mouse')} >

            Hello I'm a title

</h3>

}

 

- jsx는 <함수이름 /> 으로 사용할 수 있다. 

- 컴포넌트의 첫 글자는 반드시 대문자여야 한다. 

(소문자면 react,jsx 상에서는 html tag로 인식하기 때문)

(직접 만든 요소는 대문자로 시작해야 한다)

ex.

-jsx표현

const Title = () = > (

      <h3 props>I'm Title</h3>

);

<div><TItle /></div>

 

<div>

      <h3 props>I'm TItle</h3>

</div>

 

 

 

+) Babel

- JSX로 적은 코드를 브라우저가 이해할 수 있는 형태로 바꿔주는 것

- 변환기: Babel standalone

 

arrow function

const 함수이름 = () => (jsx부분);

 

function 함수이름 () {return(jsx부분);}

 

 

state

1.  

 

-js의 변수를 jsx에 전달하는 방법jsx에서 {js변수이름} 로 사용하면 된다

 

let counter =0;
function countUp(){
    counter += 1;
}
const Container = () => (
    <div>
        <h3>Total clicks: {counter}</h3>
        <button onClick={countUp}>Click me</button>
    </div>
);

 

문제점: UI가 화면에 바로 적용되지 않는다.

컴포넌트를 단 한번만 렌더링하고 있기 때문임 -> 리렌더링

 

- 가장 간단한 방법 -> function에 렌더링 부분을 넣기

let counter =0;
function countUp(){
    counter += 1;
    Render();
}
function Render(){
	ReactDOM.render(<Container/ >, root);
}
const Container = () => (
    <div>
        <h3>Total clicks: {counter}</h3>
        <button onClick={countUp}>Click me</button>
    </div>
);

 

2.  reactjs 내에서 데이터를 보관하고 자동으로 리렌더링

 

-reactjs에서의 rerendering

 

React.useState(data, data를 바꿀때 사용하는 함수);

React.useState(초기값); // 콘솔로 보면 초기값과 그 변수 값을 바꿀 수 있는 함수가 들어있는 배열

 

- 배열에서 요소들을 꺼내서 이름을 부여한다

cost food = ["tomato", "potato"]

 

배열이름[index] // 일반적인 방법

myFavFood = food[0]

mySecFavFood = food[1]

 

reactjs에서 쓸수 있는 방법

const [myFavFood, mySecFavFood] = food;

myFavFood > 'tomato'

mySecFavFood > 'potato'

 

const [counter, setCounter] = React.useState(0);

데이터와 그 데이터 값을 바꿀 함수도 함께 전달

그 함수를 이용해서 데이터를 바꿨을 때, 데이터 값이 바뀌고 컴포넌트도 동시에 리렌더링되어 UI가 업데이트 된다.

 

useState()에서 함수법

-

728x90
반응형

'ReactJS > Nomad Coders' 카테고리의 다른 글

7.0부터  (0) 2022.03.27
6.0부터  (1) 2022.03.24
[영화 웹 서비스]CREATE REACT APP (CRA)  (0) 2022.03.18
[영화 웹 서비스]Props  (1) 2022.03.18
[영화 웹 서비스]State  (1) 2022.03.18