【问题标题】:How to redirect user to different pages based on subdomain routing and folder based routing React.js如何基于子域路由和基于文件夹的路由 React.js 将用户重定向到不同的页面
【发布时间】:2022-12-19 14:34:56
【问题描述】:

我正在做一个 React.js 项目,在这个当前项目中所有的 url 看起来像这样

Home page url:dev-pcm.io/mydomain-name
Login Page url:dev-pcm.io/mydomain-name/auth
cart Page url:dev-pcm.io/mydomain-name/checkout
Order Page url:dev-pcm.io/mydomain-name/my-orders

//Here if i have button i am redirecting to any other page like this

import {useParams,useHistory} from "react-router-dom"
const function Button()=>{
const params=useParams();
const history=useHistory();

//is there any good approach to get rid from these checks

const goto=()=>{
    
    if (params?.url) {
history.push(`/${params.url}/my-orders`);
      
    } else {
     history.push(`/my-orders`);
    }
  };
return <button>
MY Order Page
</button>}

反应路由器路径

    const Routes=[{
        path: "/:url",
        component: Home,
        exact: true,
      },
 {
        path: ["/:url/my-orders","/my-orders"],
        component: MyOrders,
        exact: true,
      },
]

现在我有要求用户也想像这样支持 Url

Home page url:mydomain-name
    Login Page url:mydomain-name/auth
    cart Page url:mydomain-name/checkout
    Order Page url:mydomain-name/my-orders

我如何支持这两个路由。

【问题讨论】:

  • React 应用程序从一个位置提供服务。您到底想做什么,从两个 URL 提供应用程序,或者更确切地说,托管应用程序的两个实例?您能否阐明您要解决的问题是什么?
  • @DrewReese-这是一项要求。用户也可以在不添加dev-pcm.io/mydomain-name的情况下访问该应用程序。我必须支持多个网址

标签: reactjs react-router-dom


【解决方案1】:

路由可以有多个路径名

const Routes=[{
        path: {["/:url", "/"]},
        component: Home,
        exact: true,
      },
 {
        path: {["/:url/my-orders", "/my-orders"}],
        component: MyOrders,
        exact: true,
      },
]
 

【讨论】:

  • 如果用户需要导航怎么办
  • history.push(/${params.url}/my-orders);history.push(/my-orders);
  • Sachila Ranawaka- 我的意思是我如何区分用户是使用基于子域的路由还是基于文件夹 像这样 if (hostname === 'subdomain.example.com') { this.props.history.push('/subdomain-page') ; }
【解决方案2】:

在 React 中,您可以使用 componentWillMount 生命周期方法来检查当前 URL 并在必要时将用户重定向到不同的页面。例如,如果您想将用户重定向到基于子域的页面,您可以使用以下代码:

componentWillMount() {
  const { hostname } = window.location;
  if (hostname === 'subdomain.example.com') {
    this.props.history.push('/subdomain-page');
  }
}

同样,您可以使用 componentWillMount 方法检查当前 URL 并根据 URL 路径将用户重定向到页面。例如,如果你想根据 URL 中的文件夹将用户重定向到一个页面,你可以使用以下代码:

componentWillMount() {
  const { pathname } = window.location;
  if (pathname.startsWith('/folder')) {
    this.props.history.push('/folder-page');
  }
}

请注意,在这两个示例中,历史对象都用于将新 URL 推送到历史堆栈,这将导致路由器导航到指定页面。

【讨论】:

  • 如何检查,这些域名是动态的 - 可以是任何东西 - 每个用户都有不同的域名
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
  • 2020-03-07
  • 2020-03-07
  • 2015-08-11
  • 1970-01-01
相关资源
最近更新 更多