You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React应用中正确集成Facebook分享功能?

Fixing "FB is not defined" in React Facebook Share Component

Got it, let's fix that "FB is not defined" error you're hitting in your React app when trying to use the Facebook Share Dialog. The core issue is that the Facebook SDK hasn't been loaded into your app yet, so the global FB variable doesn't exist when your component tries to call it. Here's how to resolve this step by step:

Step 1: Load the Facebook SDK in Your Public index.html

First, add the Facebook SDK script to your React project's public/index.html file, right before the closing </body> tag. This will load the SDK globally and make the FB object available on the window object once loaded.

<!-- Place this in public/index.html, just before </body> -->
<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId      : 'Your Facebook App ID', // Replace with your actual App ID from Facebook Developers
      cookie     : true,
      xfbml      : true,
      version    : 'v18.0' // Use the latest supported SDK version
    });
  };

  (function(d, s, id){
     var js, fjs = d.getElementsByTagName(s)[0];
     if (d.getElementById(id)) {return;}
     js = d.createElement(s); js.id = id;
     js.src = "https://connect.facebook.net/en_US/sdk.js";
     fjs.parentNode.insertBefore(js, fjs);
   }(document, 'script', 'facebook-jssdk'));
</script>

Important Notes for This Step:

  • You Need an App ID: Create an app on the Facebook Developers platform to get your unique App ID—this is required for the SDK to work properly.
  • Asynchronous Loading: The SDK loads asynchronously, so we use fbAsyncInit to initialize it once it's ready.

Step 2: Update Your React Component to Use window.FB

In your React component, you'll need to access the global FB object via window.FB (since it's attached to the browser's window object). We'll also add a check to ensure the SDK is fully loaded before calling FB.ui to avoid errors.

Here's the updated component:

import { useEffect, useState } from 'react';

function App() {
  const [isFbLoaded, setIsFbLoaded] = useState(false);

  // Check if Facebook SDK has loaded
  useEffect(() => {
    const checkSdkLoaded = () => {
      if (window.FB) {
        setIsFbLoaded(true);
      } else {
        // Retry after a short delay if SDK isn't ready yet
        setTimeout(checkSdkLoaded, 100);
      }
    };

    checkSdkLoaded();
  }, []);

  const handleShare = () => {
    if (!isFbLoaded) {
      alert('Facebook SDK is still loading—please wait a moment!');
      return;
    }

    window.FB.ui({
      display: 'popup',
      method: 'share',
      href: 'https://developers.facebook.com/docs/', // Replace with your target share URL
    }, (response) => {
      // Optional: Handle share callback
      if (response && !response.error_message) {
        console.log('Share successful!');
      } else {
        console.log('Share cancelled or failed.');
      }
    });
  };

  return (
    <div className="App">
      <div 
        className="btn btn-success clearfix"
        onClick={handleShare}
      >
        Share Dialog
      </div>
      <p>The Share Dialog enables you to share links to a person's profile without them having to use Facebook Login. Read our Share Dialog guide to learn more about how it works.</p>
      <button 
        onClick={handleShare}
        disabled={!isFbLoaded}
      >
        Click to Share
      </button>
    </div>
  );
}

export default App;

Key Improvements:

  • Load State Tracking: We use useState to track whether the SDK is loaded, and disable the share button until it's ready.
  • Safe Access: We access window.FB directly since it's a global variable, and add a guard clause to prevent calling methods before the SDK is ready.
  • Callback Handling: Added optional logic to handle the share response (success/cancellation).

Extra Tips

  • Test in a Live Environment: Facebook's Share Dialog may not work properly in local development unless you add your local URL to your Facebook app's allowed domains.
  • Keep SDK Version Updated: Periodically check for the latest SDK version to ensure compatibility and access to new features.

内容的提问来源于stack exchange,提问作者Asking

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 14:32:53