如何在@Shopify/polaris-react 中使用新的@Shopify/app-bridge

IT技术 reactjs shopify polaris
2021-05-23 21:22:44

Shopify 最近发布了他们的新@shopify/app-bridge,但我不清楚它应该如何与@shopify/polaris一起使用

例如,我尝试制作一个 React 组件,该组件将使用 app-bridge 和 polaris 来显示吐司。

import React, { Component } from "react";
import * as PropTypes from "prop-types";
import { Toast } from "@shopify/app-bridge/actions";
import { Page } from "@shopify/polaris";

class Start extends Component {
  static contextTypes = {
    polaris: PropTypes.object
  };

  showToast() {
    console.log("SHOW TOAST");
    console.log(this.context.polaris.appBridge);
    const toastNotice = Toast.create(this.context.polaris.appBridge, {
      message: "Test Toast",
      duration: 5000
    });
    toastNotice.dispatch(Toast.Action.SHOW);
  }

  render() {
    this.showToast();
    return (
      <Page title="Do you see toast?">
        <p>I do not see toast.</p>
      </Page>
    );
  }
}

export default Start;

但它似乎没有发送动作。关于为什么不的任何想法?请注意,我的应用程序包含在 AppProvider 中,并且 app-bridge 已初始化。

ReactDOM.render(
  <AppProvider
    apiKey={process.env.REACT_APP_SHOPIFY_API_KEY}
    shopOrigin={queryString.parse(window.location.search).shop}
  >
    <Start />
  </AppProvider>,
  document.getElementById("root")
);

有什么建议?

2个回答

因此,经过大量调试后,我从 Shopify 中发现,在 App Bridge 内部,在采取任何行动之前,他们会检查 localOrigin 是否与 appURL(在合作伙伴仪表板中输入的 URL)匹配。就我而言,我有一个后端(heroku 上的 node.js 用于身份验证)和一个前端(firebase 上的react包),我的应用程序首先访问后端,然后如果身份验证通过,它会重定向到前端。因此 localOrigin 不匹配......嗯,我很高兴能解决这个问题,因为我为此失眠了很多。现在的问题是怎么办……也许这可以用 AppBridge 更新?或者我应该考虑更好的设计吗?

现在有@shopify/app-bridge-react
https://www.npmjs.com/package/@shopify/app-bridge-react

Shopify 据说还没有它的文档......但是,有人可以在他们提出时更新我的​​答案。:)


注意: 一定要有,static contextType = Context;才能访问this.context您的组件中的调度操作/等。
(希望这可以为您节省几天的痛苦,哈哈,我不是 React 开发人员,所以,是的……这在示例中没有标记为“关键”或任何内容)。


我也想解决@SomethingOn 的评论,但我没有足够的声誉来评论......

您实际上可以调试 iframe。在 chrome 开发工具中,在“顶部”的顶部,您实际上可以选择要调试的框架。
https://stackoverflow.com/a/8581276/10076085

选择 Shopify 应用 iframe 后,输入“window.location”或任何您想要的内容!

Shopify 的文档和示例有限,我在使用 Shopify 应用程序时遇到了很多问题,所以我只想尽可能多地传播帮助!