19

我使用这个链接作为我的起始文件制作了这个项目。

https://github.com/facebookincubator/create-react-app

但是在我尝试制作 Facebook 登录按钮之后,他们的官方文档将使用此按钮。

componentDidMount(){
    console.log('login mount');
    window.fbAsyncInit = function() {
        FB.init({
            appId      : '320866754951228',
            xfbml      : true,
            version    : 'v2.6'
        });

        FB.getLoginStatus(function(response) {
            //this.statusChangeCallback(response);
        });

    };

    (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 = "//connect.facebook.net/en_US/sdk.js";
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
}

因此,刷新浏览器时出现此错误。

Failed to compile.

Error in ./src/components/user_profile/LoginForm.js

/Sites/full_stack_production/xxxxx
  70:13  error  'FB' is not defined  no-undef
  76:13  error  'FB' is not defined  no-undef

✖ 2 problems (2 errors, 0 warnings)

所以我猜是因为 ESLint 导致了这个错误。我该如何解决这个问题或让这个FB变量例外?

谢谢!

4

5 回答 5

46

ESLint 不知道该变量FB是全局变量。您可以通过将以下内容添加到文件顶部来将引用的变量声明为全局变量:

/*global FB*/

有关更多信息,请查看官方 ESLint 文档中的“规则详细信息”部分:http: //eslint.org/docs/rules/no-undef

于 2016-11-07T14:43:08.997 回答
16

如果你使用 Create React App,你需要从window.
例如:

// It's a global so need to read it from window
const FB = window.FB;

但是,如果库作为 npm 包提供,则可以使用导入:

// It's an npm package so you can import it
import $ from 'jquery';

我希望这有帮助!

于 2016-11-12T18:04:24.767 回答
12

根据@dan-abramov 在对另一个答案的评论中所说的:

不使用FB,使用window.FB

这样,您可以明确定义变量 FB 需要来自何处。

于 2017-02-20T15:04:26.810 回答
3

把它放在你的 .eslintrc 文件中,所以你只需要定义一次,而不是在每个文件中:

"globals": {
    "FB": true
}
于 2018-01-16T20:24:47.383 回答
-2

我可以通过使用this.FB来解决这个问题FB

于 2016-11-07T14:36:11.087 回答