위와 같이 각각의 컴포넌트는 [ 마운팅 -> 업데이트(반복) -> 언마운팅 ]의 라이프사이클을 갖습니다.
이전에는 직관적인 이름을 갖는 다양한 메소드(componentWillMount, componentWillReceiveProps, shouldComponentUpdate, componentWillUpdate)를 통해 이벤트 발생 시점마다 세세한 조작이 가능했으나 현재는 버그나 안전성의 이유로 점점 더 단순해지고 있습니다.
위 기능을 모두 대체하는 훅(Hook)이 너무 편해서 클래스형 컴포넌트를 반드시 사용해야 하는 상황이 아니라면 함수형 컴포넌트와 함께 useEffect를 사용하는 방법이 권장되고 있습니다.
라이프사이클 별로 메소드를 사용하는 방법은 다음과 같습니다.
class TestList extends React.Component {
constructor(props) {
super(props);
this.state = {
counter:0
}
}
// 마운팅 직후 실행
// 마운팅 전 실행은 constructor() 사용
componentDidMount(){
console.log('component Mounted');
}
// 업데이트 후 이전 데이터를 파라미터로 가져옴
componentDidUpdate(prevProps) {
if(prevProps !== this.props) {
this.setState({counter:++this.state.counter})
}
}
// 언마운팅 직전 실행
componentWillUnmount(){
console.log('component Unmounted');
}
render() {
return (
<div>{this.state.counter}</div>
);
}
}
마운팅 이벤트는 실제 DOM에 컴포넌트를 추가하는 이벤트입니다.
마운팅 이벤트는 다른 프레임워크나 라이브러리 또는 데이터와 연결하는 작업에 적절합니다.
업데이트 이벤트는 컴포넌트의 업데이트와 관련이 있으며, props, state 등의 변경이 있을 때 렌더링 관련한 작업을 설정합니다.
언마운팅은 DOM에서 요소를 분리하거나 제거하는 이벤트입니다.
언마운팅 이벤트는 타이머 제거, 요소 제거, 이벤트 제거 등 설정한 요소의 정리, 제거에 사용합니다.
2. 함수형 컴포넌트와 useEffect(Hook)
리액트 16.8부터 추가된 훅(Hook)은 클래스를 사용하지 않아도 state 또는 리액트의 여러 기능을 편하게 사용하도록 해주는 기능입니다.
The greatest danger for most of us is not that our aim is too high and we miss it, but that it is too low and we reach it.
‘too’ 文字列を検索する -> /too/ The greatest danger for most of us is not that our aim is too high and we miss it, but that it is too low and we reach it.
大、小文字を構わなく ‘t’ 文字を検索するとき -> /t/-gi The greatest danger for most of us is notthat our aim is too high and we miss it, butthat it is too low and we reach it.
‘d’ から始まる単語及び文字のすべてを検索するとき -> /[d]\w+/-gi The greatest danger for most of us is not that our aim is too high and we miss it, but that it is too low and we reach it.
‘ea’を含む単語を検索するとき -> /[a-z]*ea[a-z]*/-i The greatest danger for most of us is not that our aim is too high and we miss it, but that it is too low and we reach it
If you see ‘echo “deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse” | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list‘, move forward.
substring 함수도 slice와 마찬가지로 위치(인덱스)를 매개변수로 전달하여 원하는 문자열을 추출합니다.
기본적인 작동 방식은 같으나 slice와 달리 시작인덱스가 종료인덱스보다 큰 경우에는 자동으로 두 값의 위치를 변경하여 함수를 실행합니다.
또한 substring은 매개변수에 음수를 넣으면 이 값을 0으로 인식합니다.
따라서 (3, -1)을 전달하게 되면 (3, 0)으로 인식합니다. (3, 0)은 시작 인덱스가 더 크므로 위치를 변환하여 (0, 3)의 값을 계산한 결과를 반환합니다.
함수명이 비슷한 substr의 경우 ‘위치’와 ‘추출할 문자의 수’를 파라미터로 전달하는 함수입니다.
const myWord = 'invierno';
myWord.substring(3); // 'ierno'
myWord.substring(1,3); // 'nv'
myWord.substring(3,1); // 'nv' -> 시작이 종료인덱스보다 크면 자동으로 위치 변경 후 함수를 실행
myWord.substring(3,-1); // 'inv' -> 음수는 0, 시작인덱스와 종료인덱스는 위치 변경 후 계산
myWord.substring(-4); // 'invierno' -> 음수는 0, 시작인덱스만 전달하여 0부터 끝까지 계산
myWord.substr(1,3); // 'nvi' -> 시작인덱스 1부터 문자 3개를 추출
const mySentence = 'my name is:Ron';
mySentence.replace(':',' '); //'my name is Ron'
const mySentence = 'my_name_is_Ron';
mySentence.replace('_',' '); // 'my name_is_Ron'
//정규표현식 사용해서 모든 문자 변경하기
mySentence.replace(/_/g, ' '); // 'my name is Ron'