React-router subdomain routing

后端 未结 2 1741
眼角桃花
眼角桃花 2020-12-14 08:56

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 subdoma

相关标签:
2条回答
  • 2020-12-14 09:19

    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.

    0 讨论(0)
  • 2020-12-14 09:29

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

    import React from 'react';
    
    import {MainApplication} from './Main';
    
    function subdomainApplications (map) {
      let main = map.find((item)=> item.main);
      if (!main) {
        throw new Error('Must set main flag to true on at least one subdomain app');
      }
    
      return function getComponent () {
        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!';
        }
      }
    ]);
    
    export default function Application () {
      const App = getApp();
      return (
        <App className="Application" />
      );
    }
    
    0 讨论(0)
提交回复
热议问题