Я использую фреймворк Meteor и React.
Добавлен пакет @stripe. Платежная форма работает, но в логах постоянно отображается следующее:
UnhandledPromiseRejectionWarning: TypeError: document.querySelectorAll is not a function
at findScript (/project/node_modules/@stripe/stripe-js/dist/stripe.js:9:26)
at /project/node_modules/@stripe/stripe-js/dist/stripe.js:75:20
at new Promise (<anonymous>)
at loadScript (/project/node_modules/@stripe/stripe-js/dist/stripe.js:57:19)
at /project/node_modules/@stripe/stripe-js/dist/stripe.js:113:10
at /.meteor/packages/promise/.0.11.2.1e1wn8z.joczg++os+web.browser+web.browser.legacy+web.cordova/npm/node_modules/meteor-promise/fiber_pool.js:43:40
Как я могу решить эту проблему?
вы действительно думаете, что мы можем сделать что-нибудь без кода, покажите свое обещание. у вас, вероятно, нет области для доступа к объекту документа, вы должны передать его в качестве аргумента.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Похоже, это ошибка, которую вы видите на сервере (иначе пути node_modules не будут отображаться). Таким образом, кажется, что вы пытаетесь отобразить полосатую форму на стороне сервера. Это не сработает, потому что да, этой функции на сервере нет. Я думаю, что ваш лучший вариант — добавить защиту к компоненту реакции, где используется эта полосатая форма. Что-то вроде этого:
const MyPaymentForm = (props) => {
if (Meteor.isServer) {
return <div>Stripe form will load dynamically on client</div>;
}
render <div suppressHydrationWarning = {true}>
<StripeProviver>...</StripeProvider>
</div>;
};
Параметр suppressHydrationWarning в клиентской версии предназначен для того, чтобы избежать (распространенной) ошибки React, связанной с гидратацией HTML, форма которого на клиенте отличается от формы, возвращаемой с сервера.
Вы используете старый браузер? Типа совсем старый? ржу не могу