ホームページ ウェブフロントエンド jsチュートリアル React Docs の最近のレビューから得た重要なポイント

React Docs の最近のレビューから得た重要なポイント

Oct 20, 2024 pm 06:29 PM

Key Takeaways from My Recent Review of the React Docs

このブログはもともと Medium に投稿されたものです

React 愛好家の皆さん、こんにちは!私は最近 React ドキュメントを詳しく調べたので、学んだことを皆さんと共有したいと思います。これは、React で強固な基盤を構築したい人向けの簡潔で最小限のガイドです。簡単な説明とコード スニペットで中心となる概念を詳しく見てみましょう。

少し長い話になりますが、React の中心となる概念をすべて一度に理解してください。さらに前進するには、これらの概念を要約して再検討することが有益であることがわかります。

目次

  • React で考える
  • コンポーネントと JSX
  • 小道具
  • 条件付きレンダリング
  • レンダリングリスト
  • 純粋なコンポーネント
  • UI ツリー
  • 対話性とイベント ハンドラー
  • 状態
  • 制御されたコンポーネント
  • 制御されていないコンポーネント
  • 参照
  • デフォルトの動作の防止
  • イベントの伝播
  • 複雑な状態の管理
  • コンテキスト
  • 副作用
  • useEffect のベスト プラクティス
  • React のルール
  • カスタムフック
  • フックのルール

React で考える

React は、UI を再利用可能なコンポーネントに分割することです。 React アプリを構築するときは、次のことから始めます:

  1. UI をコンポーネント階層に分割する
  2. インタラクティブ性のない静的バージョンの構築
  3. UI 状態の最小限の表現を特定する
  4. あなたの州がどこに住むべきかを決定する
  5. 逆データ フローの追加

参考: https://react.dev/learn/ Thinking-in-react

コンポーネントとJSX

コンポーネントは React アプリケーションの構成要素です。関数ベースまたはクラスベースにすることができます (時代遅れなのでお勧めしません)。 JSX は、JavaScript で HTML のようなコードを記述できるようにする構文拡張機能です。

function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

参考文献:

  • コンポーネント: https://react.dev/learn/your-first-component
  • JSX: https://react.dev/learn/writing-markup-with-jsx

小道具

Props は、親コンポーネントから子コンポーネントにデータを渡す方法です。これらは読み取り専用であり、コンポーネントを純粋に保つのに役立ちます。

function Greeting(props) {
  return <p>Welcome, {props.username}!</p>;
}

// Usage
<Greeting username="Alice" />
ログイン後にコピー
ログイン後にコピー

参考: https://react.dev/learn/passing-props-to-a-component

条件付きレンダリング

React を使用すると、特定の条件に基づいてコンポーネントまたは要素を条件付きでレンダリングできます。

function UserGreeting(props) {
  return props.isLoggedIn ? <h1>Welcome back!</h1> : <h1>Please sign in.</h1>;
}
ログイン後にコピー
ログイン後にコピー

参考: https://react.dev/learn/conditional-rendering

レンダリングリスト

React で要素のリストをレンダリングするには、map() 関数を使用します。各アイテムに一意のキー プロップを追加することを忘れないでください。

function FruitList(props) {
  const fruits = props.fruits;

  return (
    <ul>
      {fruits.map((fruit) => (
        <li key={fruit.id}>{fruit.name}</li>
      ))}
    </ul>
  );
}
ログイン後にコピー
ログイン後にコピー

参考: https://react.dev/learn/rendering-lists

純粋なコンポーネント

純粋なコンポーネントは、同じプロパティと状態に対して常に同じ出力をレンダリングします。予測可能でテストが簡単です。

function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

参考: https://react.dev/learn/keeper-components-pure

UIツリー

React は、仮想 DOM と呼ばれる UI の内部表現を構築し、維持します。これにより、React は実際の DOM の変更された部分のみを効率的に更新できます。

参考: https://react.dev/learn/ Understanding-your-ui-as-a-tree

インタラクティブ性とイベント ハンドラー

React は合成イベントを使用して、異なるブラウザ間で一貫してユーザー インタラクションを処理します。

function Greeting(props) {
  return <p>Welcome, {props.username}!</p>;
}

// Usage
<Greeting username="Alice" />
ログイン後にコピー
ログイン後にコピー

参考: https://react.dev/learn/responding-to-events

状態は、コンポーネント内で時間の経過とともに変化するデータに使用されます。 useState フックを使用して、機能コンポーネントに状態を追加します。

function UserGreeting(props) {
  return props.isLoggedIn ? <h1>Welcome back!</h1> : <h1>Please sign in.</h1>;
}
ログイン後にコピー
ログイン後にコピー

参考: https://react.dev/learn/state-a-components-memory

管理対象コンポーネント

制御対象コンポーネントの状態は React によって制御されます。

function FruitList(props) {
  const fruits = props.fruits;

  return (
    <ul>
      {fruits.map((fruit) => (
        <li key={fruit.id}>{fruit.name}</li>
      ))}
    </ul>
  );
}
ログイン後にコピー
ログイン後にコピー

制御されていないコンポーネント

制御されていないコンポーネントは、DOM 上で状態を直接管理します。

function PureComponent(props) {
  return <div>{props.value}</div>;
}
ログイン後にコピー

参照

Ref は、render メソッドで作成された DOM ノードまたは React 要素にアクセスする方法を提供します。

function Button() {
  const handleClick = () => {
    alert('Button clicked!');
  };

  return <button onClick={handleClick}>Click me</button>;
}
ログイン後にコピー

デフォルト動作の防止

特定のイベントに対するブラウザのデフォルトの動作を停止するには、preventDefault() を使用します。

import React, { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>Click me</button>
    </div>
  );
}
ログイン後にコピー

イベントの伝播

React イベントはネイティブ DOM イベントと同様に伝播します。 stopPropagation() を使用すると、イベントのバブリングを防ぐことができます。

function ControlledInput() {
  const [value, setValue] = useState('');
  return <input value={value} onChange={e => setValue(e.target.value)} />;
}
ログイン後にコピー

複雑な状態の管理

複雑な状態ロジックには useReducer フック、または Redux や Zustand などの状態管理ライブラリの使用を検討してください。

function UncontrolledInput() {
  return <input defaultValue="Hello" />;
}
ログイン後にコピー

コンテクスト

コンテキストは、すべてのレベルで props を手動で渡すことなく、コンポーネント ツリーを通じてデータを渡す方法を提供します。

import React, { useRef } from 'react';

function TextInputWithFocusButton() {
  const inputEl = useRef(null);
  const onButtonClick = () => {
    inputEl.current.focus();
  };

  return (
    <>
      <input ref={inputEl} type="text" />
      <button onClick={onButtonClick}>Focus the input</button>
    </>
  );
}
ログイン後にコピー

参考: https://react.dev/learn/passing-data-deeply-with-context

副作用

副作用とは、データのフェッチや DOM 操作など、実行される関数の範囲外に影響を与える操作です。 useEffect フックを使用して副作用を管理します。

function Form() {
  const handleSubmit = (e) => {
    e.preventDefault();
    console.log('Form submitted');
  };

  return <form onSubmit={handleSubmit}>...</form>;
}
ログイン後にコピー

useEffect のベスト プラクティス

  1. エフェクトが依存するすべての変数を依存関係配列に常に含めてください。
  2. エフェクトの依存関係を慎重に考慮して、無限ループを回避してください。
  3. useEffect の return 関数で副作用をクリーンアップします。
function Parent() {
  return (
    <div onClick={() => console.log('Parent clicked')}>
      <Child />
    </div>
  );
}

function Child() {
  const handleClick = (e) => {
    e.stopPropagation();
    console.log('Child clicked');
  };

  return <button onClick={handleClick}>Click me</button>;
}
ログイン後にコピー

参考文献:

  • useEffect は必要ないかもしれません: https://react.dev/learn/you-might-not-need-an-effect
  • エフェクトとの同期: https://react.dev/learn/synchronizing-with-Effects
  • リアクティブ エフェクトのライフサイクル: https://react.dev/learn/lifecycle-of-reactive-Effects

React のルール

  1. コンポーネント名は常に大文字で始めてください。
  2. 自己終了タグを含むすべてのタグを閉じます。
  3. プロパティを直接変更しないでください。
  4. 可能な限りコンポーネントを純粋に保ちます。

参考: https://react.dev/reference/rules

カスタムフック

カスタム フックを使用すると、コンポーネント ロジックを再利用可能な関数に抽出できます。

function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

フックのルール

  1. コンポーネントの最上位レベルでのみフックを呼び出します。
  2. React 関数コンポーネントまたはカスタム フックからのみフックを呼び出します。
  3. これらのルールを適用するには、eslint-plugin-react-hooks を使用します。

参考: https://react.dev/reference/rules/rules-of-hooks

これで React の旅は終わりです!覚えておいてください、学ぶための最良の方法は実践することです。プロジェクトの構築を開始し、これらの概念を試してください。さらに詳細が必要な場合は、遠慮せずに React ドキュメントを参照してください。コーディングを楽しんでください!

以上がReact Docs の最近のレビューから得た重要なポイントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? Apr 04, 2025 pm 02:42 PM

フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

javascriptの分解:それが何をするのか、なぜそれが重要なのか javascriptの分解:それが何をするのか、なぜそれが重要なのか Apr 09, 2025 am 12:07 AM

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

誰がより多くのPythonまたはJavaScriptを支払われますか? 誰がより多くのPythonまたはJavaScriptを支払われますか? Apr 04, 2025 am 12:09 AM

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

JavaScriptは学ぶのが難しいですか? JavaScriptは学ぶのが難しいですか? Apr 03, 2025 am 12:20 AM

JavaScriptを学ぶことは難しくありませんが、挑戦的です。 1)変数、データ型、関数などの基本概念を理解します。2)非同期プログラミングをマスターし、イベントループを通じて実装します。 3)DOM操作を使用し、非同期リクエストを処理することを約束します。 4)一般的な間違いを避け、デバッグテクニックを使用します。 5)パフォーマンスを最適化し、ベストプラクティスに従ってください。

JavaScriptの進化:現在の傾向と将来の見通し JavaScriptの進化:現在の傾向と将来の見通し Apr 10, 2025 am 09:33 AM

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptを使用して、同じIDを持つArray要素を1つのオブジェクトにマージする方法は? JavaScriptを使用して、同じIDを持つArray要素を1つのオブジェクトにマージする方法は? Apr 04, 2025 pm 05:09 PM

同じIDを持つ配列要素をJavaScriptの1つのオブジェクトにマージする方法は?データを処理するとき、私たちはしばしば同じIDを持つ必要性に遭遇します...

Shiseidoの公式Webサイトのように、視差スクロールと要素のアニメーション効果を実現する方法は?
または:
Shiseidoの公式Webサイトのようにスクロールするページを伴うアニメーション効果をどのように実現できますか? Shiseidoの公式Webサイトのように、視差スクロールと要素のアニメーション効果を実現する方法は? または: Shiseidoの公式Webサイトのようにスクロールするページを伴うアニメーション効果をどのように実現できますか? Apr 04, 2025 pm 05:36 PM

この記事の視差スクロールと要素のアニメーション効果の実現に関する議論では、Shiseidoの公式ウェブサイト(https://www.shisido.co.co.jp/sb/wonderland/)と同様の達成方法について説明します。

Console.log出力の違い結果:なぜ2つの呼び出しが異なるのですか? Console.log出力の違い結果:なぜ2つの呼び出しが異なるのですか? Apr 04, 2025 pm 05:12 PM

Console.log出力の違いの根本原因に関する詳細な議論。この記事では、Console.log関数の出力結果の違いをコードの一部で分析し、その背後にある理由を説明します。 �...

See all articles