どのようにカスタムusecopytoclipboard反応フックを作成する
私のウェブサイト(ReedBarger)で.COM、私はユーザーがパッケージの助けを借りて私の記事からコードをコピーすることができますと呼ばれる
ユーザーはちょうどスニペットの上にホバリング、クリップボードのボタンをクリックし、コードを貼り付けると、コードを使用できるように、コンピュータのクリップボードには、どこでも好きです.
代わりに、サードパーティのライブラリを使用する代わりに、私は自分のカスタム反応フックでこの機能を再現したい.すべてのカスタム反応フックを作成すると、私はそれを専用のフォルダを置く、通常呼ばれる
このフックをusecopytoclipboardというファイルに入れます.JSと私は同じ名前の機能を作ります.また、上部に反応をインポートすることを確認します.
いくつかのテキストをユーザーのクリップボードにコピーすることができます.しかし、私はこのためにライブラリを使用することを好む
それは私たちが呼ぶ関数を輸出する
関数の内部では、最初に確認する必要があります.私たちはifをセットします.そして、それはストリングがストリングか数のどちらかであることを確認するでしょう.他の種類をコピーできないユーザーに通知するコンソールにエラーをログ出力します.
最初はこの値はfalseになります.を返します.設定します
最後に、我々は戻ります
今すぐ使える
私のケースでは、私たちのコードスニペットのコードを受け取ったコピーボタンコンポーネントを使用します.
この作業を行うには、ボタンをクリックするだけです.そして、ハンドルコーヒーと呼ばれる関数のリターンで、それはテキストとしてそれに尋ねました.そして、一旦それがコピーされるならば、それは真実です.我々は、コーヒーが成功したことを示す別のアイコンを見ることができます.
私たちがコードを作ることができる1つの改善があります.我々が現在フックを書いたので.
数秒後に状態をリセットしたい場合は、usecopytoclipボードに時間間隔を渡すことができます.その機能を加えましょう.
私たちのフックに戻ると、私たちは
それから、我々は加えます
また、フックがunmountsで使用されているコンポーネント(私たちの状態はもはや更新する必要はありません)を使用する場合は、そのタイムアウトをクリアする必要があります.
そして、それで、我々は最終的なフックを持ちます.そして、それは与えられた時間間隔の後、状態がリセットされるのを許します.我々がそれに1を渡すならば、我々は結果を見るべきです.以下のように.
私は私たちのフックを作成するこのプロセスを通じていくつかのことを学んだとあなた自身の個人的なプロジェクトを通してそれを使用してクリップボードに任意のテキストをコピーしてください.
The React Bootcamp あなたが反応を学習し、ビデオ、チートシート、プラス特別ボーナスを含む1つの包括的なパッケージにバンドルを知っておくべきすべてを取ります.
ゲインインサイダー情報何百もの開発者はすでに反応をマスターするために使用して、彼らの夢の仕事を見つけて、将来の制御を取る:
それが開くとき、知らせられるために、ここをクリックしてください
react-copy-to-clipboard
.ユーザーはちょうどスニペットの上にホバリング、クリップボードのボタンをクリックし、コードを貼り付けると、コードを使用できるように、コンピュータのクリップボードには、どこでも好きです.
クリップボードに反応コピーを再現する
代わりに、サードパーティのライブラリを使用する代わりに、私は自分のカスタム反応フックでこの機能を再現したい.すべてのカスタム反応フックを作成すると、私はそれを専用のフォルダを置く、通常呼ばれる
utils
or lib
, 具体的には、私は自分のアプリケーション全体を再利用することができます.このフックをusecopytoclipboardというファイルに入れます.JSと私は同じ名前の機能を作ります.また、上部に反応をインポートすることを確認します.
いくつかのテキストをユーザーのクリップボードにコピーすることができます.しかし、私はこのためにライブラリを使用することを好む
copy-to-clipboard
.それは私たちが呼ぶ関数を輸出する
copy
.// utils/useCopyToClipboard.js
import React from "react";
import copy from "copy-to-clipboard";
export default function useCopyToClipboard() {}
次に、ユーザークリップボードに追加したいテキストをコピーするために使用する関数を作成します.この関数をコールしますhandleCopy
.ハンドレット機能の作成
関数の内部では、最初に確認する必要があります.私たちはifをセットします.そして、それはストリングがストリングか数のどちらかであることを確認するでしょう.他の種類をコピーできないユーザーに通知するコンソールにエラーをログ出力します.
import React from "react";
import copy from "copy-to-clipboard";
export default function useCopyToClipboard() {
const [isCopied, setCopied] = React.useState(false);
function handleCopy(text) {
if (typeof text === "string" || typeof text == "number") {
// copy
} else {
// don't copy
console.error(
`Cannot copy typeof ${typeof text} to clipboard, must be a string or number.`
);
}
}
}
次にテキストを取り、それを文字列に変換します.copy
関数.そこから、我々は我々が我々のアプリケーションで好きなところで、我々をフックコピーからハンドルコピー機能を返したいです.一般的にhandleCopy
関数はonClick
ボタンの.import React from "react";
import copy from "copy-to-clipboard";
export default function useCopyToClipboard() {
function handleCopy(text) {
if (typeof text === "string" || typeof text == "number") {
copy(text.toString());
} else {
console.error(
`Cannot copy typeof ${typeof text} to clipboard, must be a string or number.`
);
}
}
return handleCopy;
}
また、テキストがコピーされたかどうかを表す状態が必要です.それを作成するには、我々は呼び出すuseState
我々のフックの上部で、新しい状態変数を作ってくださいisCopied
, セッターが呼ばれるところsetCopy
.最初はこの値はfalseになります.を返します.設定します
copy
である.それ以外の場合はfalseに設定します.最後に、我々は戻ります
isCopied
と一緒に配列内のフックからhandleCopy
.import React from "react";
import copy from "copy-to-clipboard";
export default function useCopyToClipboard(resetInterval = null) {
const [isCopied, setCopied] = React.useState(false);
function handleCopy(text) {
if (typeof text === "string" || typeof text == "number") {
copy(text.toString());
setCopied(true);
} else {
setCopied(false);
console.error(
`Cannot copy typeof ${typeof text} to clipboard, must be a string or number.`
);
}
}
return [isCopied, handleCopy];
}
USEopyToClipboardの使用
今すぐ使える
useCopyToClipboard
我々が好きであるどんな構成の範囲内ででも.私のケースでは、私たちのコードスニペットのコードを受け取ったコピーボタンコンポーネントを使用します.
この作業を行うには、ボタンをクリックするだけです.そして、ハンドルコーヒーと呼ばれる関数のリターンで、それはテキストとしてそれに尋ねました.そして、一旦それがコピーされるならば、それは真実です.我々は、コーヒーが成功したことを示す別のアイコンを見ることができます.
import React from "react";
import ClipboardIcon from "../svg/ClipboardIcon";
import SuccessIcon from "../svg/SuccessIcon";
import useCopyToClipboard from "../utils/useCopyToClipboard";
function CopyButton({ code }) {
const [isCopied, handleCopy] = useCopyToClipboard();
return (
<button onClick={() => handleCopy(code)}>
{isCopied ? <SuccessIcon /> : <ClipboardIcon />}
</button>
);
}
リセット間隔の追加
私たちがコードを作ることができる1つの改善があります.我々が現在フックを書いたので.
isCopied
常にtrueになり、成功アイコンが表示されます.数秒後に状態をリセットしたい場合は、usecopytoclipボードに時間間隔を渡すことができます.その機能を加えましょう.
私たちのフックに戻ると、私たちは
resetInterval
, デフォルトの値null
, 引数が渡されなかった場合、状態はリセットされません.それから、我々は加えます
useEffect
テキストがコピーされ、リセット間隔が設定されている場合はisCopied
を返しますsetTimeout
.また、フックがunmountsで使用されているコンポーネント(私たちの状態はもはや更新する必要はありません)を使用する場合は、そのタイムアウトをクリアする必要があります.
import React from "react";
import copy from "copy-to-clipboard";
export default function useCopyToClipboard(resetInterval = null) {
const [isCopied, setCopied] = React.useState(false);
const handleCopy = React.useCallback((text) => {
if (typeof text === "string" || typeof text == "number") {
copy(text.toString());
setCopied(true);
} else {
setCopied(false);
console.error(
`Cannot copy typeof ${typeof text} to clipboard, must be a string or number.`
);
}
}, []);
React.useEffect(() => {
let timeout;
if (isCopied && resetInterval) {
timeout = setTimeout(() => setCopied(false), resetInterval);
}
return () => {
clearTimeout(timeout);
};
}, [isCopied, resetInterval]);
return [isCopied, handleCopy];
}
最後に、我々ができる最後の改善はラップすることですhandleCopy
にuseCallback
フックは、それがrerenderがあるたびに再現されないことを確認するために.最終結果
そして、それで、我々は最終的なフックを持ちます.そして、それは与えられた時間間隔の後、状態がリセットされるのを許します.我々がそれに1を渡すならば、我々は結果を見るべきです.以下のように.
import React from "react";
import ClipboardIcon from "../svg/ClipboardIcon";
import SuccessIcon from "../svg/SuccessIcon";
import useCopyToClipboard from "../utils/useCopyToClipboard";
function CopyButton({ code }) {
// isCopied is reset after 3 second timeout
const [isCopied, handleCopy] = useCopyToClipboard(3000);
return (
<button onClick={() => handleCopy(code)}>
{isCopied ? <SuccessIcon /> : <ClipboardIcon />}
</button>
);
}
私は私たちのフックを作成するこのプロセスを通じていくつかのことを学んだとあなた自身の個人的なプロジェクトを通してそれを使用してクリップボードに任意のテキストをコピーしてください.
このポストをお楽しみください。反応ブートキャンプに加わってください
The React Bootcamp あなたが反応を学習し、ビデオ、チートシート、プラス特別ボーナスを含む1つの包括的なパッケージにバンドルを知っておくべきすべてを取ります.
ゲインインサイダー情報何百もの開発者はすでに反応をマスターするために使用して、彼らの夢の仕事を見つけて、将来の制御を取る:
それが開くとき、知らせられるために、ここをクリックしてください
Reference
この問題について(どのようにカスタムusecopytoclipboard反応フックを作成する), 我々は、より多くの情報をここで見つけました https://dev.to/reedbarger/how-to-create-a-custom-usecopytoclipboard-react-hook-5g5pテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol