Как исправить ошибку "FB" не определен no-undef в проекте 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 ответов


ESLint не знает, что переменная FB глобальная. Вы можете объявить переменную, на которую ссылаетесь как на глобальную, добавив в верхнюю часть файла следующее:

/*global FB*/

для получения дополнительной информации ознакомьтесь с разделом "сведения о правилах" в официальных документах ESLint:http://eslint.org/docs/rules/no-undef


Если вы используете Create React App, вам нужно явно захватить глобальные переменные из window.
Например:

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

однако, если библиотека доступна как пакет npm, вы можете использовать imports:

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

надеюсь, это поможет!


основываясь на том, что @dan-abramov заявил в комментарии к другому ответу:

Не используйте FB используйте window.FB

таким образом, вы четко определяете, откуда должна исходить переменная FB.


положите это в свой .файл eslintrc, поэтому вам нужно определить его только один раз, а не в каждом файле:

"globals": {
    "FB": true
}

Я могу исправить это с помощью this.FB вместо этого просто FB