React - 1

React를 학습하면서 주요 개념 및 내용을 정리 해보려고 한다. 

 

 

개념


SPA(Single Page Application)

- 단일 페이지로 구성된 웹 어플리케이션을 말하며, 화면 전환 시 마다 새로운 페이지를 로드하는게 아닌 

필요한 데이터만 REST API 서버로 부터 JSON으로 전달 받아 동적으로 렌더링한다.

 

 

Rendering

- html ,css, JavaScript 등 개발자가 작성한 문서를 브라우저에 뿌려주는 과정을 말한다. 

 

 

DOM 과 Virtual DOM

- DOM은 HTML, XML 문서의 프로그래밍 인터페이스이며, javascript에서 웹 콘텐츠를 동적으로 제어할 수 있게 중간에서 인터페이스 역할을 한다. 

- Virtual DOM은 DOM의 가벼운 복사본과 비슷하며, 수정사항이 발생하면 Virtual DOM에 적용 이후 달라진 부분만 DOM에게 한 번에 전달하여 한 번만 렌더링을 진행한다. 

 

 

 

 

JSX

 


1. JSX란? 

Javascript 안에서 HTML 문법을 사용해 view를 구성할 수 있게 도와주는 Javascript를 확장한 문법이다.

 

1
2
3
4
ReactDOM.render(
  <h1>Hello, world!</h1>,
  document.getElementById('root')
);
cs

 

 

2. JSX 문법

 

1) JSX의 중괄호 안에는 유효한 모든 JavaScript 표현식을 넣을 수 있다.

 
- name 이라는 변수를 element 의 JSX 안에서 사용 가능하다
 

1
2
3
4
5
6
7
const name = 'test';
const element = (
<h1>
Hello, {name}
</h1>
);
 
ReactDOM.render(
  element,
  document.getElementById('root')
);
cs

 

- formatName(user) 함수를 element 의 JSX 안에서 사용 가능하다

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function formatName(user) {
  return user;
}
 
const user = 'test';
 
const element = (
  <h1>
    Hello, {formatName(user)}!
  </h1>
);
 
ReactDOM.render(
  element,
  document.getElementById('root')
);
cs

 

 

2) class 대신 className 사용해야 된다. 

- javascript 에서는 class라는 예약어를 사용하고 있기 때문에 className을 선언해야 된다.

 

1
2
3
4
5
const element = (
  <h1 className="hello">
    Hello, world!
  </h1>
);
cs

 

3) 태그를 닫아야 된다. 

- input, br 태그 등.. /> 로 닫아야 된다.   

 

1
2
3
const element = (
    <div className="hello" />
);
cs

 

4) 하나의 최상위 태그만 반환해야 한다.

- 컴포넌트 한개당 하나의 최상위 태그로 감싸줘야 된다.

 

1
2
3
4
5
6
const element = (
    <div>
        <div>1</div>
        <div>2</div>
    </div>
);
cs

 

 

 

 

라이프 사이클

 


 

컴포넌트 생성

1) constructor()

- 컴포넌트 클래스의 생성자로 메서드를 바인딩 하거나 state 값을 초기화하는 용도로 사용

2) render()

- 컴포넌트의 기능과 모양새를 정의하는 함수로 리액트 요소를 반환

3) componentDidMount()

- 컴포넌트를 생성하고 첫 렌더링이 끝났을 때 호출

 

 

컴포넌트 업데이트 

1) render()

2) componentDidUpdate()

- 컴포넌트 업데이트 작업이 끝나고 리렌더링 이후에 호출되는 함수

 

 

컴포넌트 제거 

1) componentWillUnmount()

- 컴포넌트가 제거되기 직전에 호출되는 함수

 

 

 

 

Props, State


 

Props

properties의 줄임말이다. 부모 컴포넌트에서 자식 컴포넌트에게 어떠한 값을 전달해줘야 할 때 사용하며

함수의 매개변수 같은 역할을 한다. 또한 props 는 읽기 전용이기 때문에 자식 컴포넌트에서 수정하면 안된다. 

 

 

Props 예제

- App 컴포넌트에서 Welcome 컴포넌트에 name props 객체를 전달하는 예제이다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Welcome extends React.Component {
    render(){
        return (
            <h1>Hello, {props.name}</h1>;
        );
    }
}
 
 
class App extends React.Component {
    render(){
        return  (
            <div>
               <Welcome name="Sara" />
            </div>
        );
    }
}
 
cs

 

 

State

컴포넌트 자기 자신이 가지고 있는 값이며, 함수 내에 변수 같은 역할을 한다. 변경이 필요한 경우 setState() 함수를 통해 값을 변경해줄 수 있다.

 

 

 

State 예제

- constructor()에서 state 값을 초기화 이후  handleClick 함수에서 setState() 함수를 통해 state 값을 변경하는 예제이다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Counter extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      number: 0
    };
  }
  
  handleClick = () => {
    this.setState({
      number: this.state.number + 1
    });
  }
  
  render() {
    return (
      <div>
        <h2>{this.state.number}</h2>
        <button onClick={this.handleClick}>클릭</button>
      </div>
    );
  };
}
 
ReactDOM.render(
  <Counter />,
  document.getElementById('root')
);
cs

 

 

참고

https://ko.reactjs.org/docs/getting-started.html

https://lktprogrammer.tistory.com/130

https://www.nextree.io/003-react-state/

https://linked2ev.github.io/devlog/2018/08/01/WEB-What-is-SPA/

Tags

Read Next