国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ ウェブフロントエンド jsチュートリアル シングル サインオン (SSO): React と ExpressJS の包括的なガイド

シングル サインオン (SSO): React と ExpressJS の包括的なガイド

Jan 06, 2025 am 01:17 AM

シングル サインオン (SSO) は、ユーザーが一度ログインすると、接続されている複數(shù)のアプリケーションやシステムにそれぞれ再認証することなくアクセスできるようにする認証メカニズムです。 SSO は、ユーザー認証を単一の信頼できるシステム (アイデンティティ プロバイダー (IdP) と呼ばれることが多い) に集中させ、そのシステムが資格情報を管理し、トークンまたはセッション データを発行して、他のサービス (サービス プロバイダー (SP) と呼ばれる) 間でユーザーの ID を検証します。

このガイドでは、SSO の仕組み、その利點と欠點、一般的な使用例、API (Express を使用した Node.js)、メイン アプリケーション (React)、および外部アプリケーションでの SSO 実裝の例について説明します。アプリケーション(React)。 SSO の原則と実踐を理解することで、組織はアプリケーションとシステム全體のユーザー エクスペリエンス、セキュリティ、運用効率を向上させることができます。

目次

  • シングル サインオン (SSO)
    • SSO はどのように機能しますか?
    • SSO の利點
    • SSO の欠點
    • SSO の使用例
    • SSO 実裝例
    • 1. API (Express を使用した Node.js)
    • 2.メインアプリケーション (React)
    • 3.外部アプリケーション (React)
  • 結(jié)論

リンク

  • GitHub リポジトリ

デモビデオ

Single Sign-On (SSO): A Comprehensive Guide with React and ExpressJS

シングル サインオン (SSO)

シングル サインオン (SSO) は、ユーザーが一度ログインすると、接続されている複數(shù)のアプリケーションやシステムにそれぞれ再認証することなくアクセスできるようにする認証メカニズムです。

SSO は、ユーザー認証を単一の信頼できるシステム (アイデンティティ プロバイダー (IdP) と呼ばれることが多い) に集中させ、そのシステムが認証情報を管理し、トークンまたはセッション データを発行して、他のサービス (サービス プロバイダー (SP) と呼ばれる) 全體でユーザーの ID を検証します。 ).

SSO はどのように機能しますか?

SSO は、OAuth 2.0、OpenID Connect (OIDC)、または Security Assertion Markup Language (SAML) などの安全なトークンベースのメカニズムを通じて動作します。簡略化されたフローは次のとおりです:

  • ユーザー ログイン: ユーザーはアイデンティティ プロバイダー (IdP) に資格情報を入力します。

  • トークン発行: IdP は資格情報を検証し、認証トークン (JWT または SAML アサーションなど) を発行します。

  • サービス アクセス: トークンはサービス プロバイダーに渡され、サービス プロバイダーがそれを検証し、追加のログインを必要とせずにアクセスを許可します。

SSO の利點

  • ユーザー エクスペリエンスの強化: ユーザーは 1 回のログインで複數(shù)のサービスにアクセスできるため、煩雑さが軽減され、使いやすさが向上します。

  • セキュリティの向上:

    • パスワードの再利用などの安全でない行為につながる可能性のあるパスワード疲労を軽減します。
    • 一元化された認証により、より強力なパスワード ポリシーと多要素認証 (MFA) の強制が可能になります。
  • 簡素化されたユーザー管理:

    • 管理者は、接続されているアプリケーション全體でのユーザー アクセスを管理しやすくなります。
    • IdP からユーザーへのアクセスを取り消すと、すべての統(tǒng)合システムへのアクセスが無効になります。
  • 時間とコストの効率:

    • ログイン関連のヘルプデスクへのリクエストを減らすことで、ユーザーとサポートチームの時間を節(jié)約します。
    • 既存の認証メカニズムを活用することで、開発時間とコストを削減します。
  • コンプライアンスと監(jiān)査:

    • 一元化された認証とアクセス制御により、セキュリティ ポリシーの適用とユーザー アクティビティの追跡が容易になります。

SSO の欠點

  • 単一障害點:

    • IdP が利用できないか侵害されている場合、ユーザーは接続されているシステムにアクセスできません。
    • 軽減策: 冗長 IdP を使用し、高可用性を確保します。
  • 複雑な実裝:

    • SSO の統(tǒng)合には、特に多様なアプリケーションやプロトコルが存在する環(huán)境では、重要な計畫と専門知識が必要です。
    • 軽減策: OAuth 2.0 や SAML などの確立されたプロトコルと堅牢な SSO ライブラリを活用します。
  • セキュリティリスク:

    • 攻撃者がユーザーの SSO 認証情報にアクセスすると、接続されているすべてのシステムにアクセスできる可能性があります。
    • 軽減策: 強力な MFA を適用し、不審なログイン アクティビティを監(jiān)視します。
  • ベンダーロックイン:

    • 組織は特定の IdP ベンダーに大きく依存している場合があり、移行が困難になります。
    • 緩和策: オープンスタンダードを選択し、獨自のソリューションを避けてください。
  • トークン管理の課題:

    • トークンの有効期限が切れたり盜まれたりすると、アクセスが中斷されたり、セキュリティ上の脆弱性が生じたりする可能性があります。
    • 緩和策: トークンの有効期限、更新メカニズム、安全なトークン ストレージを?qū)g裝します。

SSO の使用例

  • エンタープライズ アプリケーション:

    • 従業(yè)員は 1 回のログインでさまざまな社內(nèi)ツールやサービスにアクセスできます。
    • オンボーディングおよびオフボーディングのプロセスを簡素化します。
  • クラウド サービス:

    • ユーザーはログインを繰り返すことなく、クラウド アプリケーションをシームレスに切り替えることができます。
    • 生産性とユーザー エクスペリエンスを向上させます。
  • カスタマーポータル:

    • さまざまなサービスにわたる顧客に統(tǒng)一されたログイン エクスペリエンスを提供します。
    • パーソナライゼーションとターゲットを絞ったマーケティングを可能にします。
  • パートナー統(tǒng)合:

    • パートナー組織間の共有リソースへの安全なアクセスを容易にします。
    • コラボレーションとデータ交換を合理化します。

SSOの実裝例

1. API (Express を使用した Node.js)

API はアイデンティティ プロバイダー (IdP) として機能します。ユーザーを認証し、アクセス用の JWT トークンを発行します。

以下は、提供されたコードの構(gòu)造化された內(nèi)訳であり、フォロワー向けに各セクションの目的を説明しています。これは、API レイヤーに SSO 機能を?qū)g裝する方法の確実な例として機能します。

セットアップと依存関係

このセットアップでは次のパッケージが使用されます:

  • express: HTTP リクエストとルーティングの処理用。
  • jsonwebtoken: JWT の生成と検証用。
  • cors: 異なるクライアント アプリケーションからのクロスオリジン リクエストを処理します。
  • @faker-js/faker: 模擬ユーザーと Todo データの生成用。
  • cookie-parser: リクエストで送信された Cookie を解析します。
  • dotenv: 環(huán)境変數(shù)を安全にロードするため。
構(gòu)成
  • dotenv は秘密鍵を安全に管理するために使用されます。
  • 開発環(huán)境にはフォールバック シークレットが提供されます。
dotenv.config();
const SECRET_KEY = process.env.SECRET_KEY || "secret";
ミドルウェア
  • CORS は、特定のフロントエンドオリジン (メインおよび外部アプリ) からのリクエストが確実に許可されるようにします。
  • cookieParser はクライアントから送信された Cookie を解析します。
  • express.json では、JSON リクエスト本文の解析が可能です。
app.use(
  cors({
    origin: ["http://localhost:5173", "http://localhost:5174"],
    credentials: true,
  })
);
app.use(express.json());
app.use(cookieParser());

ユーザー認証とトークン生成

モック データは、ユーザーとユーザーに関連付けられた ToDo をシミュレートします。

ユーザーにはロール (管理者またはユーザー) と基本的なプロフィール情報があります。
Todo はユーザー ID にリンクされており、パーソナライズされたアクセスが可能です。

  • /login: 電子メールとパスワードに基づいてユーザーを認証します。

ユーザーはログインに成功すると、JWT を含む Cookie (sso_token) を受け取ります。
このトークンは安全で、HTTP 専用であり、改ざんを防ぐために期間が制限されています。

app.post("/login", (req, res) => {
  const { email, password } = req.body;
  const user = users.find(
    (user) => user.email === email && user.password === password
  );

  if (user) {
    const token = jwt.sign({ user }, SECRET_KEY, { expiresIn: "1h" });
    res.cookie("sso_token", token, {
      httpOnly: true,
      secure: process.env.NODE_ENV === "production",
      maxAge: 3600000,
      sameSite: "strict",
    });
    res.json({ message: "Login successful" });
  } else {
    res.status(400).json({ error: "Invalid credentials" });
  }
});
  • /verify: トークンをデコードしてユーザーの ID を検証します。無効なトークンを使用すると、不正な応答が返されます。
app.get("/verify", (req, res) => {
  const token = req.cookies.sso_token;

  if (!token) {
    return res.status(401).json({ authenticated: false });
  }

  try {
    const decoded = jwt.verify(token, SECRET_KEY);
    res.json({ authenticated: true, user: decoded });
  } catch {
    res.status(401).json({ authenticated: false, error: "Invalid token" });
  }
});
  • /logout: JWT トークンを含む Cookie をクリアします。

トークンをクリアすることで、ユーザーが安全にログアウトできるようにします。

dotenv.config();
const SECRET_KEY = process.env.SECRET_KEY || "secret";
  • /todos: 認証されたユーザーに関連付けられた todos を取得します。
app.use(
  cors({
    origin: ["http://localhost:5173", "http://localhost:5174"],
    credentials: true,
  })
);
app.use(express.json());
app.use(cookieParser());
  • /todos: 認証されたユーザーの新しい todo を追加します。
app.post("/login", (req, res) => {
  const { email, password } = req.body;
  const user = users.find(
    (user) => user.email === email && user.password === password
  );

  if (user) {
    const token = jwt.sign({ user }, SECRET_KEY, { expiresIn: "1h" });
    res.cookie("sso_token", token, {
      httpOnly: true,
      secure: process.env.NODE_ENV === "production",
      maxAge: 3600000,
      sameSite: "strict",
    });
    res.json({ message: "Login successful" });
  } else {
    res.status(400).json({ error: "Invalid credentials" });
  }
});
  • /todos/:id: 指定された ID に基づいて todo を更新します。
app.get("/verify", (req, res) => {
  const token = req.cookies.sso_token;

  if (!token) {
    return res.status(401).json({ authenticated: false });
  }

  try {
    const decoded = jwt.verify(token, SECRET_KEY);
    res.json({ authenticated: true, user: decoded });
  } catch {
    res.status(401).json({ authenticated: false, error: "Invalid token" });
  }
});
  • /todos/:id: 指定された ID に基づいて todo を削除します。
app.post("/logout", (req, res) => {
  res.clearCookie("sso_token");
  res.json({ message: "Logout successful" });
});

2. メインアプリケーション(React)

メイン アプリケーションは、API を使用してユーザー インタラクションを管理するサービス プロバイダー (SP) として機能します。

以下は、提供されたコードの構(gòu)造化された內(nèi)訳であり、フォロワー向けに各セクションの目的を説明しています。これは、メイン アプリケーション層に SSO 機能を?qū)g裝する方法の確実な例として機能します。

  • アプリコンポーネント

アプリ コンポーネントはユーザー認証を管理し、ログイン ステータスに基づいてリダイレクトします。

app.get("/todos/:userId", (req, res) => {
  const ssoToken = req.cookies.sso_token;
  const user = getUser(ssoToken);

  if (!user) {
    return res.status(401).json({ error: "Unauthorized" });
  }

  const userTodos = todos.filter((todo) => todo.userId === user.id);
  res.json(userTodos);
});
  • ログインコンポーネント

ログイン コンポーネントはユーザーのログインを処理し、認証が成功すると Todos ページにリダイレクトします。

app.post("/todos", (req, res) => {
  const ssoToken = req.cookies.sso_token;
  const user = getUser(ssoToken);

  if (!user) {
    return res.status(401).json({ error: "Unauthorized" });
  }

  const { title, description } = req.body;
  const newTodo = {
    id: faker.string.uuid(),
    userId: user.id,
    title,
    description,
  };

  todos.push(newTodo);
  res.status(201).json({ message: "Todo added successfully", data: newTodo });
});
  • Todos コンポーネント

Todos コンポーネントはユーザー固有の Todo を表示し、Todo の追加と削除を可能にします。

// Update a todo
app.put("/todos/:id", (req, res) => {
  const ssotoken = req.cookies.sso_token;
  const user = getUser(ssotoken);
  if (!user) {
    return res.status(401).json({ message: "Unauthorized" });
  }

  const { id } = req.params;
  const { title, description } = req.body;
  const index = todos.findIndex((todo) => todo.id === id);

  if (index !== -1) {
    todos[index] = {
      ...todos[index],
      title,
      description,
    };
    res.json({
      message: "Todo updated successfully",
      data: todos[index],
    });
  } else {
    res.status(404).json({ message: "Todo not found" });
  }
});

3. 外部アプリケーション(React)

外部アプリケーションは、API を使用してユーザー操作を管理する別のサービス プロバイダー (SP) として機能します。

以下は、提供されたコードの構(gòu)造化された內(nèi)訳であり、フォロワー向けに各セクションの目的を説明しています。これは、外部アプリケーション層に SSO 機能を?qū)g裝する方法の確実な例として機能します。

  • アプリコンポーネント

アプリ コンポーネントはユーザー認証を管理し、ログイン ステータスに基づいてリダイレクトします。

// Delete a todo
app.delete("/todos/:id", (req, res) => {
  const ssoToken = req.cookies.sso_token;
  const user = getUser(ssoToken);
  if (!user) {
    return res.status(401).json({ message: "Unauthorized" });
  }

  const { id } = req.params;
  const index = todos.findIndex((todo) => todo.id === id);

  if (index !== -1) {
    todos = todos.filter((todo) => todo.id !== id);
    res.json({ message: "Todo deleted successfully" });
  } else {
    res.status(404).json({ message: "Todo not found" });
  }
});
  • Todos コンポーネント

Todos コンポーネントには、ユーザー固有の Todo が表示されます。

import { useState, useEffect } from "react";
import {
  Navigate,
  Route,
  Routes,
  useNavigate,
  useSearchParams,
} from "react-router-dom";
import Todos from "./components/Todos";
import Login from "./components/Login";
import { toast } from "react-toastify";
import api from "./api";

function App() {
  const [isLoggedIn, setIsLoggedIn] = useState(false);
  const [searchParams] = useSearchParams();
  const navigate = useNavigate();

  useEffect(() => {
    const verifyLogin = async () => {
      const returnUrl = searchParams.get("returnUrl");
      try {
        const response = await api.get("/verify", {
          withCredentials: true,
        });
        if (response.data.authenticated) {
          setIsLoggedIn(true);
          toast.success("You are logged in.");
          navigate("/todos");
        } else {
          setIsLoggedIn(false);
          if (!returnUrl) {
            toast.error("You are not logged in.");
          }
        }
      } catch (error) {
        setIsLoggedIn(false);
        console.error("Verification failed:", error);
      }
    };

    verifyLogin();

    const handleVisibilityChange = () => {
      if (document.visibilityState === "visible") {
        verifyLogin();
      }
    };

    document.addEventListener("visibilitychange", handleVisibilityChange);

    return () => {
      document.removeEventListener("visibilitychange", handleVisibilityChange);
    };
  }, [navigate, searchParams]);

  return (
    <div className="container p-4 mx-auto">
      <Routes>
        <Route path="/" element={<Login />} />
        <Route
          path="/todos"
          element={isLoggedIn ? <Todos /> : <Navigate to={"/"} />}
        />
      </Routes>
    </div>
  );
}

export default App;

結(jié)論

シングル サインオン (SSO) は、複數(shù)のアプリケーションにわたるユーザー認証とアクセス管理を簡素化し、ユーザー エクスペリエンス、セキュリティ、運用効率を向上させます。認証を一元化し、安全なトークンベースのメカニズムを活用することで、組織はユーザー アクセスを合理化し、パスワード関連のリスクを軽減し、コンプライアンスと監(jiān)査機能を向上させることができます。

SSO には多くの利點がありますが、単一障害點、複雑な実裝要件、セキュリティ リスク、潛在的なベンダー ロックインなどの課題も存在します。組織は、これらのリスクを軽減し、集中認証の利點を最大化するために、SSO ソリューションを慎重に計畫して実裝する必要があります。

ベスト プラクティスに従い、確立されたプロトコルを活用し、オープン スタンダードを選択することで、組織は SSO を適切に実裝して、アプリケーションとシステム全體のユーザー エクスペリエンス、セキュリティ、運用効率を向上させることができます。

以上がシングル サインオン (SSO): React と ExpressJS の包括的なガイドの詳細內(nèi)容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

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

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

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 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

node.jsでHTTPリクエストを作成する方法は? node.jsでHTTPリクエストを作成する方法は? Jul 13, 2025 am 02:18 AM

node.jsでHTTPリクエストを開始するには、組み込みモジュール、axios、およびnode-fetchを使用する3つの一般的な方法があります。 1.依存関係のない內(nèi)蔵http/httpsモジュールを使用します。これは基本的なシナリオに適していますが、https.get()を使用してデータを取得したり、.write()を介してPOSTリクエストを送信するなど、データステッチとエラーモニタリングの手動処理が必要です。 2.Axiosは、約束に基づいたサードパーティライブラリです。簡潔な構(gòu)文と強力な機能を備えており、非同期/待ち聲、自動JSON変換、インターセプターなどをサポートします。非同期リクエスト操作を簡素化することをお勧めします。 3.Node-Fetchは、約束と単純な構(gòu)文に基づいて、ブラウザフェッチに似たスタイルを提供します

JavaScriptデータ型:プリミティブ対參照 JavaScriptデータ型:プリミティブ対參照 Jul 13, 2025 am 02:43 AM

JavaScriptデータ型は、プリミティブタイプと參照タイプに分割されます。プリミティブタイプには、文字列、數(shù)字、ブール、ヌル、未定義、シンボルが含まれます。値は不変であり、コピーは値を割り當てるときにコピーされるため、互いに影響を與えません。オブジェクト、配列、関數(shù)などの參照タイプはメモリアドレスを保存し、同じオブジェクトを指す変數(shù)は互いに影響します。 TypeofとInstanceOFを使用してタイプを決定できますが、TypeOfNullの歴史的な問題に注意してください。これらの2種類の違いを理解することは、より安定した信頼性の高いコードを書くのに役立ちます。

JavaScript Timeオブジェクト、誰かがEACTEXE、Google Chromeなどのより高速なWebサイトを構(gòu)築します。 JavaScript Timeオブジェクト、誰かがEACTEXE、Google Chromeなどのより高速なWebサイトを構(gòu)築します。 Jul 08, 2025 pm 02:27 PM

こんにちは、JavaScript開発者!今週のJavaScriptニュースへようこそ!今週は、DenoとのOracleの商標紛爭、新しいJavaScript Timeオブジェクトがブラウザ、Google Chromeアップデート、およびいくつかの強力な開発ツールによってサポートされています。始めましょう! 「JavaScript」の商標を登録しようとするDeno Oracleの試みとのOracleの商標紛爭は、論爭を引き起こしました。 Node.jsとDenoの作成者であるRyan Dahlは、商標をキャンセルするために請願書を提出しました。

ハンドリングの約束:javascriptのチェーン、エラー処理、および約束の組み合わせ ハンドリングの約束:javascriptのチェーン、エラー処理、および約束の組み合わせ Jul 08, 2025 am 02:40 AM

約束は、JavaScriptで非同期操作を処理するためのコアメカニズムです。チェーンコール、エラー処理、コンビナーの理解は、アプリケーションをマスターするための鍵です。 1.チェーンコールは、.then()を通じて新しい約束を返し、非同期プロセスの連結(jié)を?qū)g現(xiàn)します。それぞれ.then()は以前の結(jié)果を受け取り、値または約束を返すことができます。 2。エラー処理は、.catch()を使用して例外をキャッチしてサイレント障害を回避し、キャッチのデフォルト値を返すためにプロセスを継続する必要があります。 3。promise.all()などの組み合わせ(すべての成功後にのみ成功しました)、promise.race()(最初の完了が返されます)、promise.allsettled()(すべての完了を待っています)

キャッシュAPIとは何ですか?また、サービスワーカーでどのように使用されますか? キャッシュAPIとは何ですか?また、サービスワーカーでどのように使用されますか? Jul 08, 2025 am 02:43 AM

Cacheapiは、ブラウザからネットワークリクエストをキャッシュするツールです。これは、ウェブサイトのパフォーマンスとオフラインエクスペリエンスを改善するために、サービスワーカーと併用することがよくあります。 1.開発者は、スクリプト、スタイルシート、寫真などのリソースを手動で保存できるようにします。 2。要求に応じてキャッシュ応答と一致させることができます。 3.特定のキャッシュの削除またはキャッシュ全體のクリアをサポートします。 4.フェッチイベントを聞いているサービスワーカーを介して、キャッシュの優(yōu)先順位またはネットワークの優(yōu)先戦略を?qū)g裝できます。 5.オフラインサポート、繰り返しのアクセス速度の高速化、主要なリソースのプリロード、バックグラウンドアップデートコンテンツによく使用されます。 6.それを使用する場合、キャッシュバージョンの制御、ストレージ制限、およびHTTPキャッシングメカニズムとの違いに注意する必要があります。

JSラウンドアップ:JavaScriptイベントループに深く潛り込む JSラウンドアップ:JavaScriptイベントループに深く潛り込む Jul 08, 2025 am 02:24 AM

JavaScriptのイベントループは、コールスタック、WebAPIS、およびタスクキューを調(diào)整することにより、非同期操作を管理します。 1.コールスタックは同期コードを?qū)g行し、非同期タスクに遭遇すると、処理のためにWebAPIに引き渡されます。 2。WebAPIがバックグラウンドでタスクを完了した後、コールバックを?qū)潖辘工毳濠`(マクロタスクまたはマイクロタスク)に入れます。 3.イベントループは、コールスタックが空であるかどうかをチェックします。空の場合、コールバックはキューから取り出され、実行のためにコールスタックに押し込まれます。 4.マイクロタスク(Promise.thenなど)は、マクロタスク(SettimeOutなど)より優(yōu)先されます。 5.イベントループを理解するには、メインスレッドのブロックを避け、コード実行順序を最適化するのに役立ちます。

JavaScript DOMイベントでのイベントの泡立ちとキャプチャの理解 JavaScript DOMイベントでのイベントの泡立ちとキャプチャの理解 Jul 08, 2025 am 02:36 AM

イベントの泡は、ターゲット要素から祖先ノードに外側(cè)に伝播し、イベントキャプチャは外側(cè)の層からターゲット要素に內(nèi)側(cè)に伝播します。 1。イベントバブル:子要素をクリックした後、イベントは親要素のリスナーを上向きにトリガーします。たとえば、ボタンをクリックした後、最初に保育を出してから、親クリックしました。 2。イベントキャプチャ:3番目のパラメーターをtrueに設定して、リスナーが[親子要素のキャプチャリスナー]をクリックする前に[親要素のキャプチャリスナーをトリガーするなど、キャプチャステージで実行されるようにします。 3.実用的な用途には、子どもの要素イベントの統(tǒng)一された管理、傍受前処理、パフォーマンスの最適化が含まれます。 4. DOMイベントストリームは、キャプチャ、ターゲット、バブルの3つの段階に分割され、デフォルトのリスナーはバブルステージで実行されます。

マップとフィルターを超えて高次関數(shù)のJSラウンドアップ マップとフィルターを超えて高次関數(shù)のJSラウンドアップ Jul 10, 2025 am 11:41 AM

JavaScriptアレイには、Map and Filterに加えて、他の強力で使用されていない方法があります。 1.還元は、合計するだけでなく、カウント、グループ、フラットンアレイ、新しい構(gòu)造を構(gòu)築することもできます。 2。FindおよびFindIndexは、個々の要素またはインデックスを見つけるために使用されます。 3.一部とすべてが條件が存在するか、すべての出會いかを判斷するために使用されます。 4.ソートはソートできますが、元の配列を変更します。 5.副作用を避けるために、それを使用するときにアレイをコピーすることに注意してください。これらの方法により、コードがより簡潔で効率的になります。

See all articles