Shopify App/Nextjs:如何让 RoutePropagator 工作?
Shopify App/Nextjs: How to get RoutePropagator to work?
如何在 Nextjs Shopify 应用程序中进行路由传播?
我正在构建一个带有 CLI 脚手架的 Shopify 应用程序,但在使用 Nextjs 路由器进行路由时遇到了问题。标准嵌入式应用程序实现不会更新 URL,因此需要 RoutePropagator 组件。
我实现了 Shopify 的 RoutePropagator 但出现错误 TypeError: Cannot read properties of undefined (reading 'pathname')
然后我发现 this 实现可用于更新 URL,但遇到了一个非常奇怪的动态 Urls 问题。
每当用户导航到动态 url 时,url 将更新为 url 中的 [id]。 Gif 示例:
缩小范围,下面的片段会导致上面的动态 url 问题:
import { useEffect, useContext } from "react";
import Router, { useRouter } from "next/router";
import { Context as AppBridgeContext } from "@shopify/app-bridge-react";
import { Redirect } from "@shopify/app-bridge/actions";
import { RoutePropagator as ShopifyRoutePropagator } from "@shopify/app-bridge-react";
const RoutePropagator = () => {
const router = useRouter();
const { route } = router;
const appBridge = React.useContext(AppBridgeContext);
// Subscribe to appBridge changes - captures appBridge urls
// and sends them to Next.js router. Use useEffect hook to
// load once when component mounted
useEffect(() => {
appBridge.subscribe(Redirect.Action.APP, ({ path }) => {
Router.push(path);
});
}, []);
return appBridge && route ? (
<ShopifyRoutePropagator location={route} app={appBridge} />
) : null;
};
export default RoutePropagator;
如何让 URL 在用户浏览所有 url(包括动态 url)的应用程序时更新?
使用
const { asPath } = router
而不是 route
,它会起作用!
如何在 Nextjs Shopify 应用程序中进行路由传播?
我正在构建一个带有 CLI 脚手架的 Shopify 应用程序,但在使用 Nextjs 路由器进行路由时遇到了问题。标准嵌入式应用程序实现不会更新 URL,因此需要 RoutePropagator 组件。
我实现了 Shopify 的 RoutePropagator 但出现错误 TypeError: Cannot read properties of undefined (reading 'pathname')
然后我发现 this 实现可用于更新 URL,但遇到了一个非常奇怪的动态 Urls 问题。
每当用户导航到动态 url 时,url 将更新为 url 中的 [id]。 Gif 示例:
缩小范围,下面的片段会导致上面的动态 url 问题:
import { useEffect, useContext } from "react";
import Router, { useRouter } from "next/router";
import { Context as AppBridgeContext } from "@shopify/app-bridge-react";
import { Redirect } from "@shopify/app-bridge/actions";
import { RoutePropagator as ShopifyRoutePropagator } from "@shopify/app-bridge-react";
const RoutePropagator = () => {
const router = useRouter();
const { route } = router;
const appBridge = React.useContext(AppBridgeContext);
// Subscribe to appBridge changes - captures appBridge urls
// and sends them to Next.js router. Use useEffect hook to
// load once when component mounted
useEffect(() => {
appBridge.subscribe(Redirect.Action.APP, ({ path }) => {
Router.push(path);
});
}, []);
return appBridge && route ? (
<ShopifyRoutePropagator location={route} app={appBridge} />
) : null;
};
export default RoutePropagator;
如何让 URL 在用户浏览所有 url(包括动态 url)的应用程序时更新?
使用
const { asPath } = router
而不是 route
,它会起作用!