X(旧Twitter)のシェアボタンをNext.jsのcomponentを作ったので、その時のメモ書き。
X(旧Twitter)のシェアボタンをNext.jsで実装する
結論から言うと、以下のように書くとX(旧Twitter)のShareボタンcomponentを作れる。
# TwitterShareButton.tsx import { useEffect } from "react"; function TwitterShareButton() { useEffect(() => { // Twitterのスクリプトを動的にロード const script = document.createElement("script"); script.src = "https://platform.twitter.com/widgets.js"; script.charset = "utf-8"; script.async = true; document.body.appendChild(script); // コンポーネントのアンマウント時にスクリプトを削除することで、リソースをクリーンアップ return () => { document.body.removeChild(script); }; }, []); return ( <a href="https://twitter.com/share?ref_src=twsrc%5Etfw" className="twitter-share-button" data-show-count="false"> Tweet </a> ); } export default TwitterShareButton;
以下、簡単にコードの解説をする。
const script = document.createElement('script'); script.src = 'https://platform.twitter.com/widgets.js'; script.charset = 'utf-8'; script.async = true; document.body.appendChild(script);
新しい<script> タグを作成し、Twitter の widgets.js スクリプトをそのソースとして設定している。
このスクリプトは、ページ上の Twitter ボタンを自動的に変換して動作するボタンにしてくれる。
そして、この新しいスクリプトタグを document.body に追加している。
return () => { document.body.removeChild(script); };
ここでは、useEffect
のクリーンアップ関数を返している。
この関数は、コンポーネントがアンマウントされるとき(DOM から削除されるとき)に実行される。
この場合、動的に追加した Twitter のスクリプトをページから削除している。
これにより、不要なリソースを解放し、ページのパフォーマンス問題やその他の問題を防ぐことができる。
以上。