Как загрузить сторонние библиотеки в изоморфных приложениях реагировать?

Я пытаюсь использовать библиотеку чередования, в частности элементы чередования, чтобы я мог настроить пользовательскую форму для обработки платежей. Я использую Mern-Starter в файле server.js У меня есть следующий код. Вы можете видеть, что внизу я добавил тег script для импорта полосы. Тем не менее, в моей клиентской папке есть компонент, который пытается использовать полосу, и он не может получить к ней доступ. Я предполагаю, что он еще не знает, что он существует, но как я могу обойти эту проблему? Я рассмотрел компонент реагирования, который конкретно занимается загрузкой скриптов, но он не казался отличным решением. Мне просто интересно, знает ли кто-нибудь еще лучший способ. Я знаю, что мог бы использовать обратный вызов и получить эту диспетчеризацию и действие (используя REDUX), когда загрузка будет завершена, и только после этого я смогу выполнить мой код чередования, но опять же это кажется довольно раздражающим. Любые идеи по этому вопросу будут оценены.

return `
<!doctype html>
<html>
  <head>
    ${head.base.toString()}
    ${head.title.toString()}
    ${head.meta.toString()}
    ${head.link.toString()}
    ${head.script.toString()}

    ${process.env.NODE_ENV === 'production' ? `<link rel='stylesheet' href='${assetsManifest['/app.css']}' />` : ''}
    <link href='https://fonts.googleapis.com/css?family=Lato:400,300,700' rel='stylesheet' type='text/css'/>
    <link rel="shortcut icon" href="http://res.cloudinary.com/hashnode/image/upload/v1455629445/static_imgs/mern/mern-favicon-circle-fill.png" type="image/png" />
  </head>
  <body>
    <div id="root">${html}</div>
    <script>
      window.__INITIAL_STATE__ = ${JSON.stringify(initialState)};
      ${process.env.NODE_ENV === 'production' ?
      `//<![CDATA[
      window.webpackManifest = ${JSON.stringify(chunkManifest)};
      //]]>` : ''}
    </script>
    <script src='${process.env.NODE_ENV === 'production' ? assetsManifest['/vendor.js'] : '/vendor.js'}'></script>
    <script src='${process.env.NODE_ENV === 'production' ? assetsManifest['/app.js'] : '/app.js'}'></script>
    <script src='https://js.stripe.com/v3/'></script>
  </body>
</html>`;

1 ответ

Ваша проблема в том, что ваши прикладные скрипты выполняются раньше stripe.js был загружен.

положил <script src='https://js.stripe.com/v3/'></script> в голове или, по крайней мере, до вашего приложения (app.js в этом случае).

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