ホームページ  >  記事  >  ウェブフロントエンド  >  React コンポーネントをピクチャー・イン・ピクチャー・ウィンドウにマウントする

React コンポーネントをピクチャー・イン・ピクチャー・ウィンドウにマウントする

DDD
DDDオリジナル
2024-09-18 22:57:27357ブラウズ

Mounting a React component in a picture in picture window

Google は、chrome 116 に documentPictureInPicture API を導入しました。

この記事では、最初にメイン アプリケーションにマウントすることなく、ピクチャー イン ピクチャー ウィンドウに単純な React コンポーネントをマウントする方法を検討します。

ステップ 1 — コンポーネント構造のセットアップ
2つのコンポーネントを作成します。 MainComponent.js と Counter.js。 MainComponent.js では、PIP ウィンドウで Counter.js コンポーネントを開くシンプルなボタンをセットアップしました。

MainComponent.js

import React from "react";

const MainComponent = () => {
 async function openPictureInPicture() {
  // 
 }

 return (
  <div>
   <div onClick={openPictureInPicture}>Open counter</div>
  </div>
 );
};

export default MainComponent;

Counter.js

import React, { useState, useEffect } from "react";
const Counter = () => {
 const [count, setCount] = useState(0);

 useEffect(() => {
  setCount(1);
 }, []);

 const addNumber = () => {
  setCount((prevCount) => prevCount + 1);
 };
 const subtractNumber = () => {
  setCount((prevCount) => prevCount - 1);
 };

 try {
  return (
   <div>
    <div onClick={subtractNumber}>-</div>
    <button>{count}</button>
    <div onClick={addNumber}>+</div>
   </div>
  );
 } catch (error) {
  console.error("ERROR_CODE: _RENDER\n", error);
  return <></>;
 }
};

export default Counter;

ステップ 2 — ピクチャーインピクチャー機能を追加します
openPictureInPicture() 関数では、ピクチャー・イン・ピクチャー・ウィンドウを要求します。

const pipWindow = await window.documentPictureInPicture.requestWindow();

pip ウィンドウの本体に div 要素を作成します。この div に Counter.js
をマウントします。

const pipDiv = pipWindow.document.createElement("div");
pipDiv.setAttribute("id", "pip-root");
pipWindow.document.body.append(pipDiv);

ここで、Counter.js コンポーネントを ID「pip-root」の div にマウントします。

const PIP_ROOT = ReactDOM.createRoot(
        pipWindow.document.getElementById("pip-root")
);
PIP_ROOT.render(<Counter />);

ステップ 3 — すべてを組み合わせる
最終的な MainComponent.js コードは次のようになります。

import React from "react";
import Counter from "./Counter";
import ReactDOM from "react-dom/client";

const MainComponent = () => {
 async function openPictureInPicture() {
  const pipWindow = await window.documentPictureInPicture.requestWindow();
  const pipDiv = pipWindow.document.createElement("div");
  pipDiv.setAttribute("id", "pip-root");
  pipWindow.document.body.append(pipDiv);
  const PIP_ROOT = ReactDOM.createRoot(pipWindow.document.getElementById("pip-root"));
  PIP_ROOT.render(<Counter />);
 }

 return (
  <div>
   <div onClick={openPictureInPicture}>Open counter</div>
  </div>
 );
};

export default MainComponent;

これで、独自の React コンポーネントがピクチャーインピクチャーウィンドウにマウントされました!

以上がReact コンポーネントをピクチャー・イン・ピクチャー・ウィンドウにマウントするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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