【发布时间】:2021-07-03 20:31:28
【问题描述】:
背景:
我正在尝试在我的嵌入式 Shopify 应用中创建一些链接。
我了解,由于 Shopify 嵌入式应用程序呈现为 iframe,我无法使用简单的 <a> 标签。
我在本教程中取得了一些进展,但我卡住了:https://theunlikelydeveloper.com/shopify-app-bridge-react-router/
我想做的事:
我有 3 个页面(index.js、dashboard.js 和 support.js)。我想允许用户从一个页面导航到另一个页面(使用链接和/或按钮)。
我的代码:
按照上面的教程,我已经做到了这一点:
// index.js
import { Page, Frame } from "@shopify/polaris";
const Index = () => {
return (
<Page>
<Frame>
{/* LINK TO DASHBOARD PAGE*/}
{/* LINK TO SUPPORT PAGE */}
</Frame>
</Page>
);
};
export default Index;
// routes.js
import React from "react";
import { Switch, Route, withRouter } from "react-router";
import { ClientRouter, RoutePropagator } from "@shopify/app-bridge-react";
function Routes(props) {
const { history, location } = props;
return (
<>
<ClientRouter history={history} />
<RoutePropagator location={location} />
<Switch>
<Route path="/dashboard">
<Dashboard />
</Route>
<Route path="/support">
<Support />
</Route>
<Route path="/">
<Home />
</Route>
</Switch>
</>
);
}
export default withRouter(Routes);
// link.js
import React from "react";
import { Link as ReactRouterLink } from "react-router";
const IS_EXTERNAL_LINK_REGEX = /^(?:[a-z][a-z\d+.-]*:|\/\/)/;
function Link({ children, url = "", external, ref, ...rest }) {
if (external || IS_EXTERNAL_LINK_REGEX.test(url)) {
rest.target = "_blank";
rest.rel = "noopener noreferrer";
return (
<a href={url} {...rest}>
{children}
</a>
);
}
return (
<ReactRouterLink to={url} {...rest}>
{children}
</ReactRouterLink>
);
}
export default Link;
补充:
我相信我应该在某处实现以下代码,但我看不出它如何适合使用链接或按钮在页面之间导航的画面。
<AppProvider linkComponent={Link}>
{/* App content including your <Route> components */}
</AppProvider>
【问题讨论】:
-
看来您的
Link将替换之前从react-router导入的所有Link组件。 -
谢谢,@DrewReese - 这是否意味着我需要在某处包含
<AppProvider linkComponent={Link}>?如果是这样,我需要在里面放什么? -
另外,我尝试简单地将
<Link url="/dashboard">Go to Dashboard</Link>之类的内容添加到 index.js 中,但没有成功。有什么想法吗? -
您是否从
'@shopify/polaris'导入了AppProvider并将您的代码包装在您的路由器中?另外,你在某处也有Router组件吗? -
所以我假设我需要编辑我的 index.js 文件和 1) 导入 AppProvider,2) 包括上面的
linkComponent代码,3) 创建某种路由器。我有一个从Shopify Docs 获得的 ClientRouter.js 组件。我在正确的轨道上吗?
标签: reactjs shopify-app