React公式文書の解釈と学習:Hooks at a Glance
31239 ワード
解釈と学習を目的として,複数の意訳,誤訳があることを予め示しておく.
元:https://reactjs.org/docs/hooks-overview.html
ホックスが一目で見えます
は、最上位レベルからのみHooksを呼び出すことができます.繰り返し文、条件文、ネスト関数でHooksを呼び出さないでください. Hooksは、応答関数要素からのみ呼び出されます.JavaScript正規関数からHooksを呼び出さないでください.(Hooksを呼ぶにはもう一つ有効な場所があります.-あなたのCustom Hooksでは、すぐにCustom Hooksを勉強します.) linter pluginは、これらの規則を自動的に適用することができる.ルールは最初は限られていたり混乱していたりしますが、これはHooksのより良い動作を作成するために必要です.
これらのルールをさらに理解するには、専用ページを参照してください.Hooksのルールを参照してください.
___
コンポーネント間でステータスロジックを再利用する場合があります.従来、これらの問題を解決できる2つの有名な解決策があります.注文構成部品とレンダリングpropsです.Custom Hooksでは、ツリーに構成部品を追加せずにこの操作を実行できます.
ページの前のセクションでは、友人の接続状態を購読するために
まず、この論理を抽出し、
Custom Hookは機能というより習慣です.関数の名前が「
Custom Hookを使用して、フォームハンドル、アニメーション、サブスクリプションの宣言、タイマーを処理することができます.コミュニティが思いつくCustom Hookに反応するのを楽しみにしています
Custom Hookの詳細については、専用ページで「自分のHookを作成」を参照してください.
___
いくつかの内蔵関数は役に立ちますが、あまり知られていません.例えば、useContextは、ユーザが重ならずに応答コンテキストを購読することを可能にする.
___
ふーん、早すぎるでしょう.不完全な内容がある場合や、より多くの内容を学びたい場合は、State Hookドキュメントから次のページを参照してください.
また、Hooks API referenceおよびHooks FAQも参照できます.
最後に、ログインページを見逃さないでください.Hooksが導入された理由と、コードを再記述することなくクラスと並べて使用する方法を説明します.
元:https://reactjs.org/docs/hooks-overview.html
ホックスが一目で見えます
HooksはReaction 16.8に新しく追加されました.Hooksは、クラスを使用することなく、ステータスやその他の応答機能を使用することができます.
Hooksはぎゃくごかんせいを所有しています.このページでは、応答開発者に対してHooksの概要を提供します.詳細については、次の黄色のボックスを参照してください.
なぜ反応フックを導入したのか知りたい場合は、動機ドキュメントを読んでください.
ААААААААААААААА詳細はリンクに従ってください.
📌 State Hook
次の例では、レンダーカウンタを示します.値を増やすには、ボタンをクリックします.import React, { useState } from 'react';
function Example(){
//새로운 state 변수를 선언하고, 그것을 "count"라고 이름 붙입니다
const [count, setCount]=useState(0);
return(
<div>
<p>You clicked {count} times</p>
<button onClick={()=>setCount(count+1)}>Click me</button>
</div>
);
}
ここで、useState
はHook(これは何を意味するか).Hookを呼び出して関数要素のローカルステータスを追加します.を選択してもアクセスできます.useState
はペアを返します.ペアの関数を返します.現在のステータス値とそのステータスを更新できます.イベントハンドラまたは他の場所から関数を呼び出すことができます.これはクラスthis.setState
と似ていますが、異なるのは、以前のstateと新しいstateを統合しません.(State Hookの使用ドキュメントでは、useState
とthis.state
を比較する例を示します.)useState
の唯一のパラメータはstateの初期値です.上記の例では、カウンタは0からカウントを開始するので、初期値は0
である.this.state
とは異なり、ここでstateはオブジェクトである必要はありません.もしあなたが望むなら、それをできる対象にすることができます.パラメータとして渡されるstateの初期値は、最初のレンダリングでのみ使用されます.
複数のステータス変数の宣言
1つの構成部品でState Hookを複数回使用できます.function ExampleWithManyStates(){
//여러 개의 state 변수 선언!
const [age, setAge]=useState(42);
const [fruit, setFruit]=useState('banana');
const [todos, setTodos]=useState([{text:'Learn Hooks'}]);
//...
}
アレイの分解構文では、宣言されたステータス変数の他の名前を指定するためにusStateを呼び出すことができます.これらの名前はuseState APIとは無関係です.逆に、各レンダリングでは、反応によってuserStateを同じ順序で呼び出すことができます.なぜそうなるのか、いつ役に立つのか、後で戻ってみましょう.
でもHookって何ですか?
Hooksは、反応状態と関数要素のライフサイクル機能を「接続」するのに役立つ関数です.Hooksはクラスで動作しません.レベルなしで反応を使ってあげます.(夜間に既存の構成部品を再作成することは推奨されませんが、新しい構成部品を作成するときにHooksを使用してみてはいかがですか?)
応答プログラムは、useState
などの内蔵hooksを提供する.また、Hooksを直接作成して、異なるコンポーネント間でステータスに関連する論理を再使用することもできます.まずは内蔵のホックスを見てみましょう
State Hookの詳細については、専用ページ:State Hookの使用にアクセスしてください.
___
⚡️ Effect Hook
以前にも、DOMを反応素子からインポート、購読、直接操作してみたことがあります.これらの動作は他の構成部品に影響し、レンダリング中には実行できないため、sidefect(effectと略称)と呼ばれます.
Effect Hook,useEffect
は、関数要素に対して副作用を実行する能力を有する.これは、応答クラスのcomponentDidMount
、componentDidUpdate
、およびcomponentWillUnmount
の目的と同じであるが、これらは1つのAPIに統合されている.(Effect Hookの使用の文書では、useEffect
とこの方法を比較する例を示します.)
次のコンポーネントは、DOMの更新に応答してドキュメント名を設定するために使用します.import React, { useState,useEffect } from 'react';
function Example(){
const [count, setCount]=useState(0);
//componentDidMount와 componentDidUpdate와 비슷합니다
useEffect(()=>{
//브라우저 API를 사용해서 문서 제목을 업데이트합니다
document.title=`You clicked ${count} times`;
});
return(
<div>
<p>You clicked {count} times</p>
<button onClick={()=>setCount(count+1)}>
Click me
</button>
</div>
);
}
useEffect
が呼び出されると、反応器はDOMの操作後に「effect」関数を起動する.Effectsは構成部品に宣言されているので、propsとstateにアクセスできます.レンダリングするたびに、最初のレンダリングも含めて、反応が作用します.(Effect Hookの使用ドキュメントでは、クラスライフサイクルと比較する方法について説明します.)
Effectsはまた、関数を返し、「クリーンアップ」方法を選択的に指定することもできます.たとえば、次のコンポーネントは、友達のオンライン状態を購読する効果を使用して、購読をキャンセルするように整理されます.import React, { useState,useEffect } from 'react';
function FriendStatus(props){
const [isOnline, setIsOnline]=useState(null);
function handleStatusChange(status){
setIsOnline(status.isOnline);
}
useEffect(()=>{
ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange);
return()=>{
ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange);
};
});
if(isOnlien===null){
return 'Loading...';
}
return isOnline?'Online':'Offline';
}
上記の例では、エレメントのアンロードおよびその後のレンダリングのため、effectを再実行する前に、ChatAPI
を介して応答を購読することができる.(ChatAPI
に送信されたprops.friend.id
が変化しない場合は、リアクターの再購読をスキップするってメソッドを使用してもよい.)useState
と同様に、1つまたは複数の効果を構成部品に使用できます.function FriendStatusWithCounter(props){
const [count,setCount]=useState(0);
useEffect(()=>{
document.title=`You clicked ${count} times`;
});
const [isOnline,setIsOline]=useState(null);
useEffect(()=>{
ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange);
return () => {
ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange);
};
});
function handleStatusChange(status){
setIsOnline(status.isOline);
}
//...
ライフサイクルメソッドと同様に、Hooksでは、関連コンテンツをグループ化(サブスクリプションなどの関連コンテンツの追加と削除)して、コンポーネントの副作用をクリーンアップできます.
userEffectの詳細については、専用ページを参照してください.Effect Hookの使用を参照してください.
___
#Hooksのルール
HooksはJavaScript関数ですが、2つのルールがあります.
import React, { useState } from 'react';
function Example(){
//새로운 state 변수를 선언하고, 그것을 "count"라고 이름 붙입니다
const [count, setCount]=useState(0);
return(
<div>
<p>You clicked {count} times</p>
<button onClick={()=>setCount(count+1)}>Click me</button>
</div>
);
}
function ExampleWithManyStates(){
//여러 개의 state 변수 선언!
const [age, setAge]=useState(42);
const [fruit, setFruit]=useState('banana');
const [todos, setTodos]=useState([{text:'Learn Hooks'}]);
//...
}
import React, { useState,useEffect } from 'react';
function Example(){
const [count, setCount]=useState(0);
//componentDidMount와 componentDidUpdate와 비슷합니다
useEffect(()=>{
//브라우저 API를 사용해서 문서 제목을 업데이트합니다
document.title=`You clicked ${count} times`;
});
return(
<div>
<p>You clicked {count} times</p>
<button onClick={()=>setCount(count+1)}>
Click me
</button>
</div>
);
}
import React, { useState,useEffect } from 'react';
function FriendStatus(props){
const [isOnline, setIsOnline]=useState(null);
function handleStatusChange(status){
setIsOnline(status.isOnline);
}
useEffect(()=>{
ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange);
return()=>{
ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange);
};
});
if(isOnlien===null){
return 'Loading...';
}
return isOnline?'Online':'Offline';
}
function FriendStatusWithCounter(props){
const [count,setCount]=useState(0);
useEffect(()=>{
document.title=`You clicked ${count} times`;
});
const [isOnline,setIsOline]=useState(null);
useEffect(()=>{
ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange);
return () => {
ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange);
};
});
function handleStatusChange(status){
setIsOnline(status.isOline);
}
//...
これらのルールをさらに理解するには、専用ページを参照してください.Hooksのルールを参照してください.
___
💡 独自のHooksを作成
コンポーネント間でステータスロジックを再利用する場合があります.従来、これらの問題を解決できる2つの有名な解決策があります.注文構成部品とレンダリングpropsです.Custom Hooksでは、ツリーに構成部品を追加せずにこの操作を実行できます.
ページの前のセクションでは、友人の接続状態を購読するために
useState
およびuseEffect
Hooksを呼び出すFriendStatus
コンポーネントを決定しました.このロジックを他のコンポーネントで再使用しましょう.まず、この論理を抽出し、
useFriendStatus
と呼ばれるcustom hookに入れます.import React, { useState, useEffect } from 'react';
function useFriendStatus(friendID){
const [isOnline, setIsOnline]=useState(null);
function handleStatusChange(status){
setIsOnline(status.isOnline);
}
useEffect(()=>{
ChatAPI.subscribeToFrinedStatus(friendID,handleStatusChange);
return()=>{
ChatAPI.unsubscribeFromFriendStatus(friendID,handleStatusChange);
}
});
return isOnline;
}
上記の要素は、friendID
をパラメータとして、友人がオンラインであるかどうかを返します.userFriendStatus
は、複数の構成要素で使用できるようになった.function FriendStatus(props){
const isOnline=userFriendStatus(props.friend.id);
if(isOnline===null){
return 'Loading...';
}
return isOnlie?'Online':'Offline';
}
function FriendListItem(props){
const isOnline=userFriendStatus(props.friend.id);
return(
<li style={{color:isOline?'green':'black'}}>
{props.friend.name}
</li>
);
}
各素子の状態は完全に独立している.Hooksは状態論理を再利用する方法であり,状態そのものを再利用する方法ではない.実際、Hookの呼び出しはstateから完全に分離されています.従って、同じcustom hookを1つの素子で2回使用することができる.Custom Hookは機能というより習慣です.関数の名前が「
use
」で始まり、他の名前が「hooks」である場合、custom hookと呼びます.useSomething
ネーミング慣例は、linter pluginがhooksを使用してコード内のエラーを検索する方法を示しています.Custom Hookを使用して、フォームハンドル、アニメーション、サブスクリプションの宣言、タイマーを処理することができます.コミュニティが思いつくCustom Hookに反応するのを楽しみにしています
Custom Hookの詳細については、専用ページで「自分のHookを作成」を参照してください.
___
🔌 その他のhooks
いくつかの内蔵関数は役に立ちますが、あまり知られていません.例えば、useContextは、ユーザが重ならずに応答コンテキストを購読することを可能にする.
function Example(){
const locale=useContext(LocaleContext);
const theme=useContext(ThemeContext);
//...
}
さらに、useReducerは、reduceを使用して複雑な要素のローカル状態を管理することを可能にする.function Todos(){
const [todos, dispatch]=useReducer(todosReducer);
//...
すべての内蔵Hooksの詳細については、専用ページを参照してください.Hooks API Referenceを参照してください.___
次のステップ
ふーん、早すぎるでしょう.不完全な内容がある場合や、より多くの内容を学びたい場合は、State Hookドキュメントから次のページを参照してください.
また、Hooks API referenceおよびHooks FAQも参照できます.
最後に、ログインページを見逃さないでください.Hooksが導入された理由と、コードを再記述することなくクラスと並べて使用する方法を説明します.
Reference
この問題について(React公式文書の解釈と学習:Hooks at a Glance), 我々は、より多くの情報をここで見つけました https://velog.io/@bsy1141/Hooks-at-a-Glanceテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol