본문 바로가기
  • hello world
FrontEnd/React

[React] 02

by JJoajjoa 2023. 9. 11.

 

 

 

 

# 변수

var let const
함수 범위 블록 범위 상수
재선언 · 재할당 허용 O 재선언 허용 X // 재할당 허용 O 재선언 · 재할당 허용 X

 

 

 

 

 

# 라이프사이클 메드

= 컴포넌트 생명주기 관련 메서드

 

이러한 메서드들은 특정 시점에 자동으로 호출됨

 

생명주기:

컴포넌트의 생성, 변경, 소멸 과정

 

출처: https://ko.legacy.reactjs.org/docs/glossary.html

 

componentDidMount

컴포넌트가 처음 DOM에 마운트된 직후에 호출됨

여기에 API 호출과 같은 비동기 작업을 수행함

 

componentDidUpdate

컴포넌트가 업데이트 된 직후에 호출됨

초기 랜더링 작업에서는 호출되지 않음

업데이트, 변경사항, 요청 등을 처리하는데 사용

 

componentWillUnmount

컴포넌트가 DOM에서 제거되기 직전에 호출됨

>> 타이머 해제, 구독 해제 등

정리 작업을 하는데 사용

 

UseEffect

React Hooks가 도입되었을 때

함수형 컴포넌트에서 사용할 수 있도록

side-effect(부수효과)를 함수형 컴포넌트 내에서 실행할 수 있게 만듦

import React, {useState, useEffect} from 'react';

function Ex() {


	const [count, setCount] = useState(0);
    
    useEffect(() => {
    	document.title = '${count}번 클릭하셨음';
        
        return() => {
        };
    }, [count]);
    
    
    return (
    	<div>
        	<p> {count}번 클릭하셨음 </p>
            <button onClick={() => setCount(count+1)}>
            Click!
            </button>
        </div>
    );
    
    
}

 

useEffect는 랜더링 후에 실행되며
count값이 변경될 때마다 실행됨
또한
clean-up함수를 반환해서
컴포넌트가 언마운트되거나
재랜더링 되기 전에 정리작업을 할 수 있음
따라서 useEffect는
componentDidMount, componentDidUpdate, componentWillUnmount
세가지를 모두 합친 것과 같은 역할을 할 수 있음

 

 

 

# 이벤트 처리

이벤트 핸들러를 JSX 요소에 등록하여 사용함

 

- 클래스형 컴포넌트에서 이벤트 처리 :

메서드를 통해 이벤트 핸들러를 정의하고 JSX 요소에 연결함

this 키워드를 사용하려면

생성자 내부나 메서드 선언시 바인딩 해야함

class Ex extends React.Component {

	constructor(props) {
    	super(props)
        this.state = {count: 0};
        this.handleClick = this.handleClick.bind(this);
    }
    
    handleClick() {
    	this.setState({count: this.state.count + 1});
    }
    
    render() {
    	<button onClick={this.handleClick}>
        	{this.state.count}번
        </button>
    }
    
}

 

바인딩 :

Binding

자바스크립트에서 함수나 메서드와 객체를 연결하는 과정

바인딩을 통해 함수가 특정 객체의 메서드를 동작하도록 할 수 있음

 

- 명시적 바인딩 Explicit Binding

bind(), call(), apply() 메서드를 사용하여

함수에 직접 인자로 전달된 객체와 연결

function sayhello() {
	console.log('Hello, ${this.name}');
}

const preson = {
	name: "Kim",
};

sayhello.bind(person);

- 암시적 바인딩 Implicit Binding

메서드 호출 시 앞에 위치한 객체와 연결

const person = {
	name: "Kim";
    hello() {
    	console.log('Hello', ${this.name});
    },
};

- 생성자 함수 바인딩 Constructor

new 키워드를 사용하여 생성자 함수와 객체를 연결

function Person(name) {
	this.name = name;
    this.sayhello = function() {
    	console.log('Hello, ${this.name}');
    };
}
const Kim = new Person("Kim");
Kim.sayhello();

- 화살표 함수 바인딩 Arrow Function

주변 스코프의 this 값을 상속받음

const person = {
	name: 'Kim',
    sayhello: () => {
    	console.log('Hello ${this.name}');
    },
};

 

[객체에서만 쉼표 찍는 이유 : 메서드랑 구별하기 위해]

 

 

 

- 함수형 컴포넌트에서의 이벤트 처리 :

보통 화살표 함수로 이벤트 핸들러를 정의

import React, {useState} from 'react';

function Ex() {
	const[count, setCount] = useState(0);
	
    const handleClick = () => setCount(count +1);
    
    return (
    	<button onClick={handleClick}>
        	{count}번
        </button>
    );
}

 

 

 

화살표 함수 :

arrow function

ES6에 도입된 선언 방식

function 대신 => 를 사용함

return을 생략할 수 있음

this 키워드 없이 주변 스코프에서 this 값을 상속받음

>> 콜백함수에서 this를 bind 해야하는 문제 발생 X

{중괄호} 없이도 함수 선언 가능

화살표 함수 내부에서 다른 화살표 함수를 작성할 수 있음

/* 매개변수가 없는 함수 */
const func1 = () => {
	//함수내용
};


/* 매개변수 한개 */
const func2 = param => {
	//함수내용
};


/* 매개변수 여러개 */
const func3 = (param1, param2, ... ) => {
	//함수내용
};


/* 반환값이 있는 경우 */
const func4 = () => expression;


/* 반환값이 여러개 */
const func5 = () => {
	//함수내용
    return expression;
};

 

 

 

 

 

# 조건부 랜더링

JSX 내에서 JavaScript 표현식을 사용하여

조건부 로직을 작성할 수 있음

 

if /  else , switch

function Ex ({number}) {
	
    /* if else */
	if (number > 10) {
    	return <div> 10보다 큰 값 </div>;
    } else {
    	return <div> 10보다 작은 값 </div>;
    }
    
    /* switch(case) */
    case 1:
    return <div> 1 </div>;
    case 2:
    return <div> 2 </div>;
    default:
    return <div> 다른 값 </div>
    
}

 

삼항연산자

function Ex ({number}) {
	return {
    	<div> {number>10 ? '10보다 큼' : '10보다 작음'} </div>
    };
}

 

&& 연산자를 활용한 랜더링

function Ex({message}) {
    return (
    	<div>
        	{message.length > 0 && <h2> hello, {message} </h2>}
        </div>
    );
    
    if(message.length > 0 ) {
        return <h2> Hello, {message} </h2>;
    }
}

-> 위에랑 아래랑 같은말임

 

 

# 리스트와 key

배열함수 map :

반복문과 같은 역할

배열 순서대로 하나씩 요소에 접근해 가져옴

>> 배열 안에 요소들을 하나하나 순서대로 컴포넌트로 만들어줌

>> ex.map( (ex) => < > );

const number = [1, 2, 3, 4, 5];

/* 여러개의 동일한 상태의 컴포넌트를 랜더링 해야할 때,
각 배열의 각 요소에 대해 하나씩 컴포넌트를 생성하고 싶을 때 */

/* 이런 경우 map 메서드를 사용하여 각 요소별로 하나씩 컴포넌트를 생성
단, 고유한 key 값을 부여해야함 */


const list = number.map((number) =>
	<li> {number} </li>
);
/* 목록을 쭉 생성해버림
근데 key 값이 애매함 */


const list = number.map((number) =>
	<li key={key.toString()}> {number} </li>
);
/* key 값 지정해주기 */


/* 근데 키 값이 중복되면 어떡해? */
/* 보통 데이터 ID 값을 key로 사용하는데
최후의 수단으로 인덱스 번호를 사용하기도 함 */

/* 인덱스 번호를 사용할 경우!
배열의 순서가 바뀔 경우
key의 업데이트를 해야하기 때문에 비효율적임 */

/* 최대한 인덱스 번호를 키값으로 쓰는 것은 피하자구 */

/* key 값은 전역적으로 고유할 필요는 없음
형재 사이에서만 고유하면 됨 */

출처:&nbsp;https://ko.legacy.reactjs.org/docs/glossary.html

 

 

 

# 폼 처리

폼 요소의 상태를 관리하고

사용자 입력에 따라 반응하는 방법

일반적으로

onChange 이벤트 핸들러를 통해 사용자의 입력을 상태에 연결함

onSubmit 이벤트 핸들러를 통해 폼 제출시 실행할 작업을 정의함

일반적으로

폼처리는 이벤트 핸들러랑 상태로 함

 

- 클래스 컴포넌트에서의 폼처리

class NameForm extends Component {
	constructor(props) {
    	super(props);
        this.state = {value : ''};
        
        this.handleChange = this.handleChange.bind(this);
        this.handleSubmit = this.handleSubmit.bind(this);
    }
    
    handleChange(event) {
    	this.setState({value: event.target.value});
    }
    /* event.target.value : 이벤트가 발생한 요소(target)인 입력필드의 현재 값(value) */
    
    handleSubmit(event) {
    	alert('A name submit: ' + this.state.value);
        event.preventDefualt();
    }
    /* .preventDefualt() : 기본동작을 취소하는 역할 */
    /* 폼을 제출하면 기본적으로 페이지가 다시로드 또는 새로고침 되는데
    이 함수를 실행하면 새로고침을 막고 알림창만 띄워줌 */
    
    render() {
    	return(
        	<form onSubmit = {this.handleSubmit}>
            	<label>Name:
                	<input type="text" value={this.state.value} onChange={this.handleChange} />
                </label>
                <input type="submit" value="submit" />
            </form>
        );
    }
}

 

 

- 함수형 컴포넌트에서의 폼처리

useState Hook, onChange, onSubmit사용

import React, {useState} from 'react';

function NameForm() {
	const [value, setValue] = useState('');
    
    const handleChange = (event) => setValue(event.target.value);
    
    const handleSubmit = (event) => {
    	alert('A name submit: ' + value);
        event.preventDefault();
    };
    
    return (
    	<form onSubmit={handleSubmit}>
            <label> Name:
                <input type="text" value={value} onChange={handleChange} />
            </label>
            <input type="submit" value="submit" />
        </form>
    );
}

 

 

 

 

'FrontEnd > React' 카테고리의 다른 글

[React] 헷깔리는 것 정리  (0) 2023.09.13
[React] 간단실습.01 (로그인, 할일목록, 로또, 바꾸기)  (0) 2023.09.11
[React] 03  (0) 2023.09.11
[React] 01  (0) 2023.09.11
[React] React 시작하기  (0) 2023.09.08