Skip to content Skip to sidebar Skip to footer

React-router Subdomain Routing

I'm building a site using react and react-router. My site is split into two sections: front and partners section. I want the partners section to be accessed using a subdomain partn

Solution 1:

I don't use react-router, but the following should work if you just add react router jsx to the individual application components

importReactfrom'react';

import {MainApplication} from'./Main';

functionsubdomainApplications (map) {
  let main = map.find((item)=> item.main);
  if (!main) {
    thrownewError('Must set main flag to true on at least one subdomain app');
  }

  returnfunctiongetComponent () {
    const parts = window.location.hostname.split('.');

    let last_index = -2;
    const last = parts[parts.length - 1];
    const is_localhost = last === 'localhost';
    if (is_localhost) {
      last_index = -1;
    }

    const subdomain = parts.slice(0, last_index).join('.');

    if (!subdomain) {
      return main.application;
    }

    const app = map.find(({subdomains})=> subdomains.includes(subdomain));
    if (app) {
      return app.application;
    } else {
      return main.application;
    }
  }
}

const getApp = subdomainApplications([
  {
    subdomains: ['www'],
    application: function () {
      return'Main!'
    }
    main: true
  },
  {
    subdomains: ['foo'],
    application: function () {
      return'Foo!';
    }
  },
  {
    subdomains: ['bar', 'baz.bar'],
    application: function () {
      return'Bar!';
    }
  }
]);

exportdefaultfunctionApplication () {
  constApp = getApp();
  return (
    <AppclassName="Application" />
  );
}

Solution 2:

It's a good practice to treat primary domain code and sub domain code as different codebases. Also as you are aware and react-router is a client side module. Although this hack might work, it's generally frowned upon.

Post a Comment for "React-router Subdomain Routing"