如何修复错误'FB'在create-react-app项目中没有定义no-undef?

时间:2016-11-07 13:33:42

标签: facebook reactjs eslint create-react-app

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

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变量设置例外?

谢谢!

5 个答案:

答案 0 :(得分:26)

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

/*global FB*/

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

答案 1 :(得分:10)

如果您使用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';

我希望这有帮助!

答案 2 :(得分:6)

基于@ dan-abramov在对另一个答案的评论中所说的内容:

  

请勿使用FB,请使用window.FB

这样,您可以明确地定义变量FB需要来自的位置。

答案 3 :(得分:1)

将它放在.eslintrc文件中,因此您只需要定义一次而不是每个文件:

"globals": {
    "FB": true
}

答案 4 :(得分:-1)

我可以使用this.FB代替FB

来解决此问题