反応のフック
23983 ワード
今日、我々は反応で広く使われているフックについて学びます.まず、フックの必要性を教えてください.我々はすべての反応は、機能とクラスのコンポーネントを知っている.以前は、機能コンポーネントは、データをレンダリングするために使用されていたが、ビジネスロジックまたは任意の副作用自体ではなかった.
それで、フックは機能的なコンポーネントでライフサイクル方法と州を実行するために導入されました.彼らはまた、コードの再利用性についての考えを彼らと一緒に買いました.それは、それが反応コミュニティでとても速く受け入れられた理由です.
ドラムロール🥁 **
主な話題で進んでいきましょう. USENTフック このフックは、機能部品の中で状態を使用して、維持するのを助けます.それは非常に使いやすいです.usEstateフックは2つの要素を持つ配列を返します.最初のものは状態変数で、2番目は状態変数を変更する関数です.
エフェクトフック
このフックはクラスコンポーネントで使用されたすべてのライフサイクルメソッドの交換として機能します.コールバックと依存関係の配列が含まれます.依存関係の配列の値が変更されるたびにフックが実行されます.
このフックの中で、DOMで何かを変更したり、APIからデータを取り出すなどの副作用を呼び出すことができます.
このフックで使用されるもう一つのものはクリーンアップ機能です.この機能は、タイマーをクリアして、ウェブソケットなどを閉じる副作用の掃除に役立ちます. UseContextフック クラスのコンポーネントのように、コンテキストAPIも同じようにしました
このフックは、アプリケーション内の読み込み状態を実装し、子コンポーネントにデータを渡すために使用できます.
それを作成するには、
上記のコードで実験できますhere . usereducerフック あなたがReduxを知っているならば、あなたはすでにこのフックが何をするかについてわかっています
グローバルに還元子を使用するには、コンテキストを作成し、コンポーネント間で渡すことができます.Geddit!
ここでは、状態を変更するために初期状態とディスパッチがあります.ディスパッチの中で、我々はいくつかの情報と一緒に行動を渡す
それは今のところです.他にもフックがあります
ハッピーコーディング!
それで、フックは機能的なコンポーネントでライフサイクル方法と州を実行するために導入されました.彼らはまた、コードの再利用性についての考えを彼らと一緒に買いました.それは、それが反応コミュニティでとても速く受け入れられた理由です.
ドラムロール🥁 **
主な話題で進んでいきましょう.
import { useState } from "react";
export default function App() {
const [number, setNumber] = useState(0);
return (
<div className="App">
<button onClick={() => setNumber(number - 1)}>Subtract</button>
<input
type="number"
value={number}
onChange={(e) => setNumber(e.target.value)}
/>
<button onClick={() => setNumber(number + 1)}>Add</button>
</div>
);
}
はい、我々はnumber
状態変数としてsetNumber
を変更する関数としてnumber
.エフェクトフック
import { useEffect, useState } from "react";
export default function App() {
const [number, setNumber] = useState(0);
const [isEven, toggleEven] = useState(true);
useEffect(() => {
if (number % 2 !== 0) {
toggleEven(false);
} else {
toggleEven(true);
}
}, [number]);
return (
<div className="App">
<button onClick={() => setNumber(number - 1)}>Subtract</button>
<input
type="number"
value={number}
onChange={(e) => setNumber(e.target.value)}
/>
<button onClick={() => setNumber(number + 1)}>Add</button>
<p>{isEven ? "Even" : "Odd"}</p>
</div>
);
}
ここでは、依存関係の配列にはnumber
. 毎回ユーザがボタンを押すか、入力値を変更するたびにuseEffect
フックがトリガされ、それが奇妙かどうかは、番号をチェックします.このフックの中で、DOMで何かを変更したり、APIからデータを取り出すなどの副作用を呼び出すことができます.
このフックで使用されるもう一つのものはクリーンアップ機能です.この機能は、タイマーをクリアして、ウェブソケットなどを閉じる副作用の掃除に役立ちます.
useContext
機能部品のフックこのフックは、基本的にコンポーネント間の共通のグローバル状態を維持するのに役立ちます.状態が変化すると、親コンポーネントが使用しても、コンテキストの下のすべての子コンポーネント間で再レンダリングをトリガーしますshouldComponentUpdate
or React.memo
.このフックは、アプリケーション内の読み込み状態を実装し、子コンポーネントにデータを渡すために使用できます.
それを作成するには、
createContext
関数と初期値を渡します.コンテキストプロバイダーでは、プロップと呼ばれるvalue
コンテクストを変更するためのコンテキスト変数と関数からなる.import { createContext } from "react";
export const UserContext = createContext({
name: "Initial Name"
});
次に、このコンテキストを親コンポーネントで使用し、コンテキストプロバイダー内でアプリケーションをラップし、値を渡します.だから今、すべての子コンポーネントはvalue
プロップimport { useContext, useState } from "react";
import Person from "./Person";
import { UserContext } from "./Context";
export default function App() {
const user = useContext(UserContext);
const [person, togglePerson] = useState(user);
return (
<UserContext.Provider value={[person, togglePerson]}>
<div className="App">Hello {user.name}!</div>
<Person />
</UserContext.Provider>
);
}
現在子要素Person
我々はアクセスできますvalue
propと私たちもコンテキスト値を変更することができます.import { useContext } from "react";
import { UserContext } from "./Context";
function Person() {
const [person, togglePerson] = useContext(UserContext);
return (
<div>
Person: {person.name}
<button
onClick={() => {
togglePerson({ name: "Stuart Little" });
}}
>
Change
</button>
</div>
);
}
export default Person;
この方法を使用することができますuseContext
フック.コンテキストを作成し、コンテキストコンポーネントの親コンポーネントをラップしてください.上記のコードで実験できますhere .
state
によるとaction
渡される.それは簡単にローカルの状態を維持するのに役立ちますが、reduxで我々はグローバルに行うことができます.グローバルに還元子を使用するには、コンテキストを作成し、コンポーネント間で渡すことができます.Geddit!
ここでは、状態を変更するために初期状態とディスパッチがあります.ディスパッチの中で、我々はいくつかの情報と一緒に行動を渡す
payload
. 次に、このアクションは、還元器に移り、その後、状態が変化する.import { useReducer } from "react";
import "./styles.css";
const initialState = [
{
name: "Mad Angles",
quantity: 5
},
{
name: "Pringles",
quantity: 3
},
{
name: "Lays",
quantity: 2
},
{
name: "Kurkure",
quantity: 1
},
{
name: "Uncle Chips",
quantity: 9
}
];
function reducer(state, action) {
switch (action.type) {
case "add":
return [...state, action.payload];
case "delete":
return state.filter((_, index) => index !== action.payload);
default:
return state;
}
}
export default function App() {
const [state, dispatch] = useReducer(reducer, initialState);
return (
<div className="App">
<h1>Hello CodeSandbox</h1>
<ul>
{state.map(({ name, quantity }, index) => (
<div className="list-item">
<li key={name}>
<b>{name}</b> - {quantity}
</li>
<button
onClick={() => {
dispatch({ type: "delete", payload: index });
}}
>
delete
</button>
</div>
))}
<button
onClick={() => {
dispatch({
type: "add",
payload: {
name: "Doritoes",
quantity: 5
}
});
}}
>
add
</button>
</ul>
</div>
);
}
上記のコードを見つけることができますhere .それは今のところです.他にもフックがあります
useRef
, useCallback
しかし、それらはめったに使われません.この記事を読んでくれてありがとう.何かがはっきりしないならば、知らせてください.ハッピーコーディング!
Reference
この問題について(反応のフック), 我々は、より多くの情報をここで見つけました https://dev.to/deepansh946/hooks-in-react-58kiテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol