Использовать объект, включенный в глобальный тег <script> внутри компонента React

Я пытаюсь добавить PayPal кнопка с помощью React.

Согласно paypals dev гид мне нужно включить

<script src = "https://www.paypal.com/sdk/js?client-id=YOUR_CLIENT_ID"></script>

в теге <head></head> в index.html, а затем используйте

import React from "react";
import ReactDOM from "react-dom"
const PayPalButton = paypal.Buttons.driver("react", { React, ReactDOM });
function YourComponent() {
  const createOrder = (data, actions) => {
    return actions.order.create({
      purchase_units: [
        {
          amount: {
            value: "0.01",
          },
        },
      ],
    });
  };
  const onApprove = (data, actions) => {
    return actions.order.capture();
  };
  return (
    <PayPalButton
      createOrder = {(data, actions) => createOrder(data, actions)}
      onApprove = {(data, actions) => onApprove(data, actions)}
    />
  );
}

Однако const PayPalButton = paypal.Buttons.driver("react", {React, ReactDOM});

строка выдает ошибку

'paypal' is not defined no-undef

Если объект, включенный из внешнего <script>, не загружен. Как я могу загрузить объект загрузки из внешнего <script> в компонент React?

window.paypal.whatever. А если серьезно: не путайте предупреждение о линтере с фактическая ошибка. Ваш код должен нормально работать как есть. Если предупреждение линтера блокирует конвейер сборки или что-то еще, вы можете подавить его директивным комментарием или явно использовать глобальный объект окна.
Jared Smith 10.05.2022 15:43

не компилируется с этой ошибкой

Darlyn 10.05.2022 15:44

@Darlyn — см. предыдущий комментарий Джареда о переопределении вашего линтера.

Quentin 10.05.2022 15:45

@Quentin TBF Я редактировал это примерно в то же время, когда он это публиковал.

Jared Smith 10.05.2022 15:46

@JaredSmith да, использование окна ... сработало, можете ли вы опубликовать комментарий в качестве ответа на вопрос, как подавить линтер? Не смог найти ответа на свой вопрос, прежде чем опубликовать его, и я уверен, что многие люди, которые работают с react/js раз в год, наткнутся на эту проблему, как и я.

Darlyn 10.05.2022 15:49

@Darlyn сделал, рад помочь

Jared Smith 10.05.2022 16:44
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
18
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть два способа сделать этот круг квадратным:

const PayPalButton = window.paypal.Buttons.driver("react", { React, ReactDOM });

Помните, что в Javascript глобальные переменные также являются свойствами глобального объекта (window в браузере). Мне на самом деле нравится делать это для глобальных переменных, потому что в коде очень четко видно, что эта штука является глобальной переменной, а не читается и думает: «WTF, откуда это взялось?».

Вы также можете (предполагая ESLint) напрямую подавить предупреждение о ворсе (НЕ рекомендуется):

// eslint-disable-line no-undef
const PayPalButton = paypal.Buttons.driver("react", { React, ReactDOM });

Другие вопросы по теме