Using this boilerplate as reference I created an Electron app. It uses webpack to bundle the scripts and express server to host it.
Webpack config is practically same as this and server this.
Electron's script loads:
mainWindow.loadURL('file://' + __dirname + '/app/index.html');
And index.html loads the script hosted by the server:
<script src="http://localhost:3000/dist/bundle.js"></script>
I run electron index.js
to build the app and node server
to start server which using webpack bundles the scripts.
It works fine, my React component App is mounted. But how I integrate react-router into this?
I implemented it the same way I would in a browser app. I get this error:
[react-router] Location "/Users/arjun/Documents/Github/electron-app/app/index.html" did not match any routes
It is taking file path as the route. Going through the boiler plate code did not help. What am I missing?
HashRouter: When we have small client side applications which doesn't need backend we can use HashRouter because when we use hashes in the URL/location bar browser doesn't make a server request. BrowserRouter: When we have big production-ready applications which serve backend, it is recommended to use <BrowserRouter> .
A <Router> that uses the hash portion of the URL (i.e. window. location. hash ) to keep your UI in sync with the URL.
BrowserRouter
with HashRouter
.import { HashRouter, Route } from "react-router-dom";
And then in my index.js
or the entry file of the Electron app I had something like this:
<HashRouter> <div> <Route path="/" exact component={ Home } /> <Route path="/firstPage" component={ FirstPage } /> <Route path="/secondPage" component={ SecondPage } /> </div> </HashRouter>
And then everything just worked.
The reasoning: BrowserRouter
is meant for request-based environments whereas HashRouter
is meant for file-based environments.
Read more here:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With