Bruce Lim
Bruce Lim

Reputation: 755

nested url routing using react-router and webpack dev server

I'm having some issues working with react-router and webpack-dev-server to achieve nested url routing.

webpack.config.js

output: {
    path: path.resolve(__dirname, 'build'),
    publicPath: "/", <-- this enabled routing to /register/step2
    filename: "js/bundle.js",
},

routes.js

const routes = {
    childRoutes: [
        { path: '/', component: Home },
        { path: '/login', component: Login },
        { path: '/register', component: Register },
        { path: '/register/step2', component: SecondStep },
    ]
};

export default (<Router routes={routes} history={createBrowserHistory()} />);

When clicking around in the appliation, I can get to /register/step2 but once I hit refresh in the browser, my common.js and bundle.js is missing: 404, since it's trying to load everything from /register/ directory.

Can anyone help? Thanks.

Upvotes: 10

Views: 2553

Answers (3)

RamoFX
RamoFX

Reputation: 536

Make sure your webpack configuration file contains following code:

output: {
    publicPath: '/'
},
devServer: {
    historyApiFallback: true
}

See more in this article

Upvotes: 0

Bruce Lim
Bruce Lim

Reputation: 755

I figured it out. 2 things that is needed to enable this.

webpack.config.js

devServer: {
    historyApiFallback: true <-- this needs to be set to true
}


routes.js

const routes = {
    childRoutes: [
        { path: '/', component: Home },
        { path: '/login', component: Login },
        { path: '/register', component: Register, childRoutes: [
            { path: 'step2', component: SecondStep },
        ] },
    ]
};

Upvotes: 8

RichG
RichG

Reputation: 309

If you use hashHistory instead of createBrowserHistory() it will keep the server from requesting to your current url on your server.

export default (<Router routes={routes} history={hashHistory} />);

Upvotes: -1

Related Questions