React|Hooks 01(概要/状態/効果)
1. Intro
1-1. ホークスとは?
Reactには4種類のBuilt-In Hooksがあります usState-基本とコア useEffect-基本&コア useRef useReducer
ホークスとは?
関数構成部品で「バインド」「react state&ライフサイクル機能」(ライフサイクル特性)を使用できる関数です.
classで動作xを実行する
→classなしreactを有効にする
Hook(カスタムhook)を直接作成することもできます
→構成部品間のステータスロジックを再使用します.
1-2. なぜ使いますか.
:文書構成部品間で状態論理を再利用することは困難である. 複雑な部品→分かりにくい Class:混同者と機器 ::クラス→キャビネット(Close)類問題 state参照の値:常に最新のため、結果は保証されません.
(ex.人☆克follow,素早く人に従うと、最後のfollowのヒントウィンドウしか表示されません.) ◇ソリューション:モジュール(state,ライフサイクル実装)を関数コンポーネントに実装する
1-3. ルールの使用
ルール1:最上位レベルでのみ呼び出す繰り返し文、条件文、ネスト関数でHookX を実行理由 シンボルをレンダリングするたびにhook が同じ順序で呼び出されることを確認します.
それ以外:カスタムホームページ内 2. State Hook
2-1. useState初期レンダリング期間.
返された状態( state更新時使用 新しいstate値を受信し、シンボルツリーレンダリングをキュー に登録します.
次回レンダリング時 である.
2-2. Tips
まず、使い方に慣れる
-(既存のsetStateと同じ)非同期更新
-useState実行時にstateとsetStateのペアが付与されます
覚えておきたい概念 ゴミ収集
-関数の実行が完了すると、関数で使用されているすべてのメモリがクリーンアップされます.
-参照がないメモリに対して実行 エンクロージャ
-関数の実行が終了してもメモリに保持できるメソッド
-環境を作成した時点を記憶する関数 です.
一括変更により分割することが望ましい.
ステータス値を保存するにはどうすればいいですか?
関数保存状態x
もしCloserが出動したら?
-関数構成部品:管理可能ステータス(Hooks→stateを保存、 関数 変数保存(エンクロージャ使用) 例
3-1. useEffectC o m ponentDidMount/componentDidUpdate/componentWillUnmountなどの目的+1つのAPI に統合
≪パラメータ|Parameters|oraolap≫:コマンド・タイプまたは効果を生成する関数
関数の実行時間(
-スクリーン上でレンダリングが完了したら実行します.
-既定の動作:すべてのレンダリングが完了した後に実行
- 値が変更された場合のみ 実行可能
使用方法
関連しない論理:複数の
レンダリング後に構成部品がどのように機能するかを示します.
→我々が渡した関数(「effect」と呼ばれる)を覚え、DOM更新を実行した後にロードする この場合、effectで文書タイトルを指定し、データをインポートし、他のコマンドAPI を呼び出すことができる
レンダリング後に発生したと考えられます
有効になるタイミング
DOMが更新されていることを確認
デフォルト:最初のレンダリングと 以降のすべての更新で実行
( 必要に応じてeffectを変更する方法 )
useEffect Advanced
useEffect vsライフサイクル
useEffect:複数のライフサイクルの組み合わせ ComponentDidMount(依存配列:[]) shouldComponentUpdate(依存シナリオにない場合) ComponentDidUpdate(ある場合) componentWillUnmount
Render → Effect Callback → Clean Up!
実際の操作 CLINUP関数(次のレンダリングよりも)が先に実行される理由 レンダリング完了後に実行→効果 より良いux を提供effect実行時レンダリング完了保証 クリア関数値:古いサイクル値をインポートする理由 CLINUP関数作成時はエンクロージャとして(「自分が作成した環境の関数を記憶する」):以前のレンダリング時、つまり以前のレンダリング時を記憶する.
1-1. ホークスとは?
Reactには4種類のBuilt-In Hooksがあります
ホークスとは?
関数構成部品で「バインド」「react state&ライフサイクル機能」(ライフサイクル特性)を使用できる関数です.
classで動作xを実行する
→classなしreactを有効にする
Hook(カスタムhook)を直接作成することもできます
→構成部品間のステータスロジックを再使用します.
:文書
(ex.人☆克follow,素早く人に従うと、最後のfollowのヒントウィンドウしか表示されません.)
1-3. ルールの使用
ルール1:最上位レベルでのみ呼び出す
import React, { useState } from "react"
function Hooks(props) {
if (!props.isExist) {
const [state, setState] = useState(); // Error!
}
const [state2, setState2] = useState(); // Error!
}
// react가 여러 훅들을 구분할 수 있는 유일한 정보는 훅이 사용된 순서 뿐이기 때문.
ルール2 react関数構成部品 でのみHookを呼び出す2-1. useState
const [state, setState] = useState(initialState);
返された状態(
state
)==最初に渡されたパラメータ(initialState
)の値setState
n.関数 setState(newState + 1); // setState와 동일하게 비동기 업데이트
setState(prev => prev + 1);
useState
で返される最初の値は、常に最新の更新された状態2-2. Tips
まず、使い方に慣れる
-(既存のsetStateと同じ)非同期更新
-useState実行時にstateとsetStateのペアが付与されます
覚えておきたい概念
-関数の実行が完了すると、関数で使用されているすべてのメモリがクリーンアップされます.
-参照がないメモリに対して実行
-関数の実行が終了してもメモリに保持できるメソッド
-環境を作成した時点を記憶する関数
// 아주 간단한 버전의 useState
const useState = (init = undefined) => {
let value = init
const getter = () => value // 클로저
const setter = next => (value = next) // 클로저
return [getter, setter]
}
const [state, setState] = useState('클로저')
state()
setState("어려워!")
state()
2-3. FAQuseState()
良好な状態分割管理ステータス値を保存するにはどうすればいいですか?
関数保存状態x
もしCloserが出動したら?
-関数構成部品:管理可能ステータス(Hooks→stateを保存、
useState
)useState()
const useState = (init = undefined) => {
let value = init
const getter = () => value // 클로저
const setter = next => (value = next) // 클로저
return [getter, setter]
}
const [state, setState] = useState('클로저')
- 두 함수 (`getter()`, `setter()` ): 배열 형태로 리턴
- `useState`사용 시, 배열 구조분해 할당 형태 사용 다수
→ 일반적인 함수
실행 종료(return)되고 나서 내부의 데이터들이 가비지 컬렉팅 되어야 됨
→ 이 경우
내부 함수: 지역 변수 참조 → 안 사라짐
외부로 노출된 getter, setter 함수를 통해 내부 변수에 지속적으로 접근하며 호출/재할당 가능
useState()
非同期処理(第2パラメータ)方法 // class component
handleBtnColor = () => {
this.setState({
color: "red"
}, () => console.log(this.state.color))
}
// function component
const [color, setColor] = useState("blue")
const handleBtnColor = () => {
setColor("red")
}
useEffect(() => {
console.log(color)
}, [color])
3. Effect Hook3-1. useEffect
useEffect(function);
useEffect(() => {}, [count]) // 의존성 배열 (배열 안에 담긴 값들을 추적, 그때 마다 업데이트)
≪パラメータ|Parameters|oraolap≫:コマンド・タイプまたは効果を生成する関数
関数の実行時間(
setState
)-スクリーン上でレンダリングが完了したら実行します.
-既定の動作:すべてのレンダリングが完了した後に実行
- 値が変更された場合のみ 実行可能
使用方法
useEffect(() => {
console.log("componentDidUpdate")
})
useEffect(() => {
console.log("componentDidMount")
return () => console.log("componentWillUnmount")
}, [])
useEffect(() => {
console.log("componentDidMount")
console.log("componentDidUpdate") // + shouldComponentUpdate
return () => console.log("componentWillUnmount")
}, [state])
// WRONG!!
useEffect(() => {
console.log("CDM 쓰고 싶어요")
}, [])
useEffect(() => {
console.log("CDU 쓰고 싶어요")
}, [state])
3-2. FAQ関連しない論理:複数の
useEffect
を使用して区切るuseEffect
ロールレンダリング後に構成部品がどのように機能するかを示します.
→我々が渡した関数(「effect」と呼ばれる)を覚え、DOM更新を実行した後にロードする
useEffect
レンダリングのたびに実行(変更可能)レンダリング後に発生したと考えられます
有効になるタイミング
DOMが更新されていることを確認
デフォルト:最初のレンダリングと 以降のすべての更新で実行
( 必要に応じてeffectを変更する方法 )
useEffect vsライフサイクル
useEffect:複数のライフサイクルの組み合わせ
Render → Effect Callback → Clean Up!
const Foo = () => {
const [state, setState] = useState(0);
console.log("render", state);
useEffect(() => {
console.log("useEffect Callback", state);
return () => console.log("cleanUp", state);
}, [state]);
return <div onClick={() => setState(state + 1)}>하잉</div>;
};
export default Foo;
- 함수 body ⇒ `render`
- useEffect
- 의존성 배열 : useEffect 내부에서 해당 값의 변화만(!) 감지
- 클린업 함수 : 구독/해제 등 다음 effect 전에 이번 effect의 내용을 정리해야 할 때 사용
render, 0
useEffect Callback, 0
// 클릭
render, 1
cleanUp, 0
useEffect Callback, 1
Reference
この問題について(React|Hooks 01(概要/状態/効果)), 我々は、より多くの情報をここで見つけました https://velog.io/@katej927/React-Hooksテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol