React の useReducer: 2 つのミニプロジェクトで状態管理を簡素化する
導入
状態管理は、React で動的でインタラクティブなアプリケーションを構築する上で重要な部分です。 useState は単純な状態を管理するのに十分ですが、アプリケーションの状態が複雑になるにつれて、useReducer はそれを処理するためのより強力で予測可能な方法を提供します。 Redux のリデューサー パターンからインスピレーションを得た useReducer を使用すると、特定のアクションに応じて状態遷移がどのように発生するかを定義できるため、複数の複雑な状態更新があるシナリオに最適です。
この記事では次のことを行います:
- useReducer、その構文、いつ使用するかについてわかりやすく説明します。
- 2 つのミニプロジェクトを実装します。
- 複数のアクションによるカウンター: 基本的なインクリメント/デクリメントを超えた例で、useReducer が複数のアクション タイプを処理する方法を示します。
- 複雑な状態遷移を含む To-Do リスト: 複雑な状態オブジェクトを管理する useReducer の機能を強調する To-Do アプリ。
useReducer を使用して React の状態管理を簡素化する方法を詳しく見てみましょう!
useReducer を理解する
useReducerとは何ですか?
useReducer は、useState が不十分な状況向けに設計された React フックです。状態を直接更新する代わりに、現在の状態とアクションに基づいて次の状態を計算するリデューサー関数を指定します。この宣言的アプローチにより、状態遷移の予測可能性が維持され、より複雑な状態ロジックを集中管理できるようになります。
useReducer の構文
構文の内訳は次のとおりです。
const [state, dispatch] = useReducer(reducer, initialState);
-
reducer: アクションに基づいて状態を更新する方法を定義する関数。 2 つの引数を取ります:
- state: 現在の状態。
- action: アクションに関する情報を含むオブジェクト。通常はタイプとオプションのペイロードが含まれます。
initialState: 状態の開始値。
例: useReducer を使用した基本カウンター
useReducer を使用して単純なカウンターを作成し、実際の構文を確認してみましょう。
import React, { useReducer } from 'react'; function reducer(state, action) { switch (action.type) { case 'increment': return { count: state.count + 1 }; case 'decrement': return { count: state.count - 1 }; default: return state; } } function Counter() { const [state, dispatch] = useReducer(reducer, { count: 0 }); return ( <div> <p>Count: {state.count}</p> <button onclick="{()"> dispatch({ type: 'increment' })}>Increment</button> <button onclick="{()"> dispatch({ type: 'decrement' })}>Decrement</button> </div> ); } export default Counter;
コードの説明
- Reducer 関数: この関数はアクションの処理方法を定義します。アクションのタイプ (インクリメントまたはデクリメント) に基づいて、reducer 関数は新しい状態オブジェクトを返します。
- アクションのディスパッチ: ディスパッチはアクションをリデューサーに送信し、リデューサーはそれを処理し、それに応じて状態を更新します。
useReducer を使用する場合
useReducer は、次の場合に特に役立ちます。
- 状態ロジックが複雑であるか、複数のサブ値が含まれています。
- 次の状態は前の状態に依存します。
- 複数のコンポーネントは、Reducer によって管理される状態にアクセスする必要があります (グローバル状態については useReducer と useContext を組み合わせることができます)。
ミニプロジェクト 1: 複数のアクションによるカウンター
このプロジェクトでは、useReducer がより広範なアクションのセットをどのように処理するかを確認するために、複数の操作 (インクリメント、デクリメント、リセット) を可能にする拡張カウンターを作成します。
ステップ 1: Reducer 関数を定義する
const [state, dispatch] = useReducer(reducer, initialState);
ステップ 2: カウンタコンポーネントを作成する
import React, { useReducer } from 'react'; function reducer(state, action) { switch (action.type) { case 'increment': return { count: state.count + 1 }; case 'decrement': return { count: state.count - 1 }; default: return state; } } function Counter() { const [state, dispatch] = useReducer(reducer, { count: 0 }); return ( <div> <p>Count: {state.count}</p> <button onclick="{()"> dispatch({ type: 'increment' })}>Increment</button> <button onclick="{()"> dispatch({ type: 'decrement' })}>Decrement</button> </div> ); } export default Counter;
この強化されたカウンターは、インクリメントとデクリメントに加えて、リセット機能をサポートするようになりました。このプロジェクトは、状態更新のアクションを管理する useReducer の柔軟性を実証します。
ミニ プロジェクト 2: 複雑な状態遷移を含む To-Do リストの作成
ToDo リスト アプリは、useReducer がタスクの追加、削除、切り替えなど、複数の遷移を伴う複雑な状態オブジェクトの管理にいかに最適であるかを強調しています。
ステップ 1: レデューサを定義する
import React, { useReducer } from 'react'; function reducer(state, action) { switch (action.type) { case 'increment': return { count: state.count + 1 }; case 'decrement': return { count: state.count - 1 }; case 'reset': return { count: 0 }; default: throw new Error(`Unknown action: ${action.type}`); } }
ステップ 2: ToDo リストコンポーネントを作成する
import React, { useReducer, useState } from 'react'; 関数 ToDoList() { const [todos, ディスパッチ] = useReducer(todoReducer, []); const [タスク, setTask] = useState(''); const handleAdd = () => { if (task.trim()) { dispatch({ タイプ: 'add'、ペイロード: タスク }); setTask(''); // 入力フィールドをクリアします } }; 戻る ( <div> <h2 id="To-Do-リスト">To-Do リスト</h2> setTask(e.target.value)} placeholder="新しいタスクを入力してください" /> <button onclick="{handleAdd}">タスクの追加</button> <ul> {todos.map(todo => ( <li key="{todo.id}"> <h3> ToDoリストコードの説明 </h3> <ol> <li> <p><strong>アクション</strong>:</p> <ul> <li> <strong>追加</strong>: 一意の ID と完了ステータスを false に設定して、新しいタスクをリストに追加します。</li> <li> <strong>削除</strong>: ID に基づいてタスクをフィルターして削除します。</li> <li> <strong>切り替え</strong>: 完了ステータスを切り替えることで、タスクを完了または未完了としてマークします。</li> </ul> </li> <li><p><strong>動的データでの useReducer の使用</strong>: この例は、useReducer がオブジェクトの配列内の複雑なネストされた状態更新をどのように処理し、複数のプロパティを持つ項目の管理に最適なものにするかを示します。</p></li> </ol> <hr> <h2> 結論 </h2> <p>この記事では、React アプリケーションでより複雑な状態管理を行うために useReducer を効果的に使用する方法を学びました。私たちのプロジェクトを通じて:</p> <ol> <li> <strong>拡張カウンター</strong>は、useReducer が複数のアクションベースの状態更新を簡素化する方法を示しました。</li> <li> <strong>To-Do リスト</strong>では、useReducer を使用してタスクの配列などの複雑な状態オブジェクトを管理する方法を示しました。</li> </ol> <p>useReducer を使用すると、堅牢な状態管理を必要とするアプリケーション向けに、よりクリーンで予測可能で保守しやすいコードを作成できます。これらのプロジェクトを試してみて、次回 React アプリで複雑な状態ロジックに遭遇したときは、Reducer の使用を検討してください!</p> </li> </ul> </div>
以上がuseReducer: React フックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

JavaScriptコアデータ型は、ブラウザとnode.jsで一貫していますが、余分なタイプとは異なる方法で処理されます。 1)グローバルオブジェクトはブラウザのウィンドウであり、node.jsのグローバルです2)バイナリデータの処理に使用されるNode.jsの一意のバッファオブジェクト。 3)パフォーマンスと時間の処理にも違いがあり、環境に従ってコードを調整する必要があります。

javascriptusestwotypesofcomments:シングルライン(//)およびマルチライン(//)

PythonとJavaScriptの主な違いは、タイプシステムとアプリケーションシナリオです。 1。Pythonは、科学的コンピューティングとデータ分析に適した動的タイプを使用します。 2。JavaScriptは弱いタイプを採用し、フロントエンドとフルスタックの開発で広く使用されています。この2つは、非同期プログラミングとパフォーマンスの最適化に独自の利点があり、選択する際にプロジェクトの要件に従って決定する必要があります。

PythonまたはJavaScriptを選択するかどうかは、プロジェクトの種類によって異なります。1)データサイエンスおよび自動化タスクのPythonを選択します。 2)フロントエンドとフルスタック開発のためにJavaScriptを選択します。 Pythonは、データ処理と自動化における強力なライブラリに好まれていますが、JavaScriptはWebインタラクションとフルスタック開発の利点に不可欠です。

PythonとJavaScriptにはそれぞれ独自の利点があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1. Pythonは、データサイエンスやバックエンド開発に適した簡潔な構文を備えた学習が簡単ですが、実行速度が遅くなっています。 2。JavaScriptはフロントエンド開発のいたるところにあり、強力な非同期プログラミング機能を備えています。 node.jsはフルスタックの開発に適していますが、構文は複雑でエラーが発生しやすい場合があります。

javascriptisnotbuiltoncorc;それは、解釈されていることを解釈しました。

JavaScriptは、フロントエンドおよびバックエンド開発に使用できます。フロントエンドは、DOM操作を介してユーザーエクスペリエンスを強化し、バックエンドはnode.jsを介してサーバータスクを処理することを処理します。 1.フロントエンドの例:Webページテキストのコンテンツを変更します。 2。バックエンドの例:node.jsサーバーを作成します。

PythonまたはJavaScriptの選択は、キャリア開発、学習曲線、エコシステムに基づいている必要があります。1)キャリア開発:Pythonはデータサイエンスとバックエンド開発に適していますが、JavaScriptはフロントエンドおよびフルスタック開発に適しています。 2)学習曲線:Python構文は簡潔で初心者に適しています。 JavaScriptの構文は柔軟です。 3)エコシステム:Pythonには豊富な科学コンピューティングライブラリがあり、JavaScriptには強力なフロントエンドフレームワークがあります。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

メモ帳++7.3.1
使いやすく無料のコードエディター

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!
