[TIL 04.04] Class-Component/this/Component-Lifecycle
Class-Componenet
クラスエレメントは、反応中にエレメントを宣言する方法である.
クラス部品は現在あまり使われていない方式ですが、いろいろな使い方があるので、知っておくといいでしょう.
部品を制作物の説明書にするのは便利です.
で画像を見るとクラス図がわかりやすくなります.
クラス構成部品は、通常、バックエンドで使用されます.
beck側でクラス要素を使用すると、APIの作成が容易になります.
の写真を見てください.
まず,クラスには前に関数のないものが見え,これらをメソッド(method)と呼ぶ.
「そしてこの方法の前で」.「(点)」はオブジェクト(オブジェクト向けプログラミング)と呼ばれます.
次に、クラス構成部品の方法を示します.
import { Component } from "react";
export default class CounterPage extends Component {
// state라는 이름이 있는데 마음대로 이름을 바꾸지 못한다.
// class라는 것과 상관없이 컴포넌트로 확장했기에 사용할수 있는 것이다.
state = {
count: 0, // 이러면 카운트라는 스테이트가 만들어진다.
};
// 화살표 함수를 사용하면 동적스코프가 되지 않고 this가
// 윈도우의 this가 되므로 여기서는 우리가 원하는 컴포넌트의 this가 된다.
onClickCounter = () => {
console.log(this.state.count);
// setState 또한 컴포넌트에 내장되어 있는 기능이다
// 따로 선언해주지 않아도 사용가능하고 컴포넌트로 확장해주지 않으면 사용불가이다.
// this의 작동원리는 누가 이것을 작동시켰는지가 중요함
this.setState((prev: any) => ({
count: prev.count + 1,
}));
};
// 이런식으로 직접 만들어서 사용할 수 있다. 직접 만들었기에 이름을 마음대로 해도 된다.
aaa() {}
// 이것 또한 리액트에서 제공해주는 컴포넌트의 기능이다.
// 원래 클래스에는 이런 기능이 없다.
render() {
// 화면에 그려지는 부분
return (
<div>
{/* 스테이트를 사용하게 되면 this가 나오게 되는데 이때
이 this는 클래스 컴포넌트 그 자체라고 생각하면 된다.
단 동적스코프를 가진 this인 경우에는 실행시킨 위치에 따라 달라진다.*/}
<div>현재카운트{this.state.count}</div>
{/* bind를 사용하면 현재 함수와 바인딩 되기 때문에,
즉 사용하는 함수의 this가 되기때문에
화살표 함수가 아니더라도 this를 지정할수 있다.
이것 또한 동적인 this인 경우에 사용한다.*/}
<button onClick={this.onClickCounter.bind(this)}>
!!!!!!!!!!!카운트 올리기!!!!!!!!!!!!
</button>
</div>
);
}
}
// 클래스라는게 원래 컴포넌트가 아니다. 리액트에서 제공해주는 확장 클래스를 사용한다.
// 컴포넌트로 사용하고 싶으면 extends라는게 있는데 클래스를 확장시켜준다.
// Component로 확장해주는거다.
// 이렇게 사용하면 컴포넌트 기능을 가진 클래스가 된다.
// 클래스는 객체지향프로그램을 만들때 묶기위해 만드는거라고 생각하면 된다.
this
上のクラス構成部品は、変数または関数を使用するときにthisを追加します.
このthisが何なのか理解してみましょう.
これは関数のキーワードです.
変数、オブジェクト、配列などを参照できます.
thisの動作原理は、実行される位置に基づいて参照される.
使用するスキャナーによって、参照が異なります.
上のコードから見ると、一番上のthisはグローバルwindowを参照しています.
下のqqqを見て、aaaを参照することができます.
ですが、矢印関数ではダイナミックスキャンプログラムとして動作せず、グローバルリファレンスとして動作します.
これがLexicalScopraと言語上のthisです.
コンポーネントライフサイクル
反応素子にはライフサイクルがある.
構成部品が実行、更新、または削除されると、特定の例外が発生します.
まずクラスエレメントの使い方です.
において、クラス要素は、写真に示すようにreactによって提供されるイベント関数を有する.
// 렌더되고 나서 딱 한번만 실행
// 화면에 그림이 다 그려지고나서 포커스를 깜빡깜빡하게 해줄때 사용 가능
componentDidMount() {
console.log("마운트!!!!!!!!!!!");
this.inputRef.current?.focus();
}
// 렌더될때 마다 실행
// 처음은 실행을 안한다.
componentDidUpdate() {
console.log("수정되고 다시그려짐!!!!");
}
// 컴포넌트가 사라지고 나서 실행이 된다.
// 여기에 api요청을 해주면 나가기 버튼이 아니고 다른방법으로 나가도 api요청이 된다.
componentWillUnmount() {
console.log("컴포넌트 사라짐!!!!!!!");
}
次に、関数型構成部品のライフサイクルの使用方法を示します.関数型構成部品はuserEffectを使用します.
// 1. 클래스형 컴포넌트의 componentDidMount와 같은 동작을 한다.
useEffect(() => {
console.log("마운트됨!!");
inputRef.current?.focus();
}, []);
// 2. 클래스형 컴포넌트의 componentDidUpdate와 같은 동작을 하지만 처음부터 실행이 된다.
useEffect(() => {
console.log("수정되고 다시 그려짐");
});
// 3. 클래스형 컴포넌트의 componentWillUnmount와 같은 동작을 한다.
useEffect(() => {
return () => {
console.log("컴포넌트 사라짐!!!!!!!");
};
}, []);
// 4. componentDidMount와 componentWillUnmount를 한번에 작성하여 사용할수 있다.
useEffect(() => {
console.log("마운트됨!!");
inputRef.current?.focus();
return () => {
console.log("컴포넌트 사라짐!!!!!!!");
};
}, []);
Reference
この問題について([TIL 04.04] Class-Component/this/Component-Lifecycle), 我々は、より多くの情報をここで見つけました https://velog.io/@uiop5487/TIL-Class-Component-this-Component-Lifecycleテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol