Sharing your content on social media directly from your React app to WhatsApp, Messenger, Twitter, and LinkedIn, without using any third-party packages. π±π»
π Core Idea
- Opens a new tab for each social media platform with a pre-filled message containing text and a URL.
- Uses native Clipboard API to allow users to copy the link.
- Avoids the complexity of installing additional npm packages for social sharing.
- Re usable react component.
π» Let's Dive into the Code:
import React, { useState } from "react";
import {
FaWhatsapp,
FaFacebookMessenger,
FaTwitter,
FaLinkedin,
FaRegClipboard,
FaClipboardCheck,
FaShare,
} from "react-icons/fa";
const ShareButton = ({ text, url }) => {
const [shareNow, setShareNow] = useState(false);
const message = encodeURIComponent(`${text} ${url}`);
// Social media share handlers
const handleWhatsAppShare = () => {
window.open(`https://wa.me/?text=${message}`, "_blank");
};
const handleMessengerShare = () => {
window.open(
`fb-messenger://share/?link=${encodeURIComponent(url)}&app_id=YOUR_APP_ID`,
"_blank"
);
};
const handleTwitterShare = () => {
window.open(`https://twitter.com/intent/tweet?text=${message}`, "_blank");
};
const handleLinkedInShare = () => {
window.open(
`https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent(
url
)}`,
"_blank"
);
};
// Clipboard functionality
const [copied, setCopied] = useState(false);
const handleCopy = () => {
navigator.clipboard.writeText(url).then(() => {
setCopied(true);
setTimeout(() => setCopied(false), 1500);
});
};
return (
<div>
{/* Main Share Button */}
<button
className="px-3 py-1 text-white rounded-md flex gap-1 bg-blue-400 font-semibold mx-auto"
onClick={() => setShareNow(!shareNow)}
>
<span> Share {!shareNow && <span> Now </span>} </span>
<FaShare size={24} />
</button>
{/* Share Options Section */}
{shareNow && (
<section className="my-2">
<div className="flex flex-col items-center justify-center bg-gray-100 py-2 ">
<h1 className="text-2xl font-bold mb-4">Share this content</h1>
<div className="flex space-x-4 py-3">
<button
onClick={handleWhatsAppShare}
className="flex items-center justify-center p-2 bg-green-500 text-white rounded-full hover:bg-green-600"
>
<FaWhatsapp size={24} />
</button>
<button
onClick={handleMessengerShare}
className="flex items-center justify-center p-2 bg-blue-500 text-white rounded-full hover:bg-blue-600"
>
<FaFacebookMessenger size={24} />
</button>
<button
onClick={handleTwitterShare}
className="flex items-center justify-center p-2 bg-blue-400 text-white rounded-full hover:bg-blue-500"
>
<FaTwitter size={24} />
</button>
<button
onClick={handleLinkedInShare}
className="flex items-center justify-center p-2 bg-blue-700 text-white rounded-full hover:bg-blue-800"
>
<FaLinkedin size={24} />
</button>
</div>
</div>
{/* Copy URL Section */}
<div className="flex flex-col items-center justify-center bg-gray-100 mb-2 py-2">
<h1 className="text-xl font-bold mb-4">Copy this URL</h1>
<div className="flex items-center justify-center">
<button
onClick={handleCopy}
className={`flex items-center justify-center p-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 transition duration-200 ${
copied ? "bg-green-600 hover:bg-green-700" : ""
}`}
>
{copied ? (
<FaClipboardCheck size={24} />
) : (
<FaRegClipboard size={16} />
)}
<span className="ml-2">{copied ? "Copied!" : "Copy URL"}</span>
</button>
</div>
</div>
</section>
)}
</div>
);
};
export default ShareButton;
Top comments (3)
Thanks
It's working! Greatπ
Thanks bro