yarn add [email protected]
mkdir -p ./app/javascript/src/
touch ./app/javascript/src/App.jsx
Paste this into App.jsx:
import React from "react";
import { Route, Switch, BrowserRouter as Router } from "react-router-dom";
const App = () => {
return (
<Router>
<Switch>
<Route exact path="/" render={() => <div>Home</div>} />
<Route exact component={Dashboard} path="/dashboard" /> {/* Prefer this one */}
</Switch>
</Router>
);
};
export default App;
yarn add [email protected]
mkdir -p ./app/javascript/src/apis
touch ./app/javascript/src/apis/axios.js
Paste this into axios.js:
import axios from "axios";
axios.defaults.baseURL = "/";
export const setAuthHeaders = () => {
axios.defaults.headers = {
Accept: "application/json",
"Content-Type": "application/json",
"X-CSRF-TOKEN": document
.querySelector('[name="csrf-token"]')
.getAttribute("content"),
};
...
};
Fully replace app/javascript/packs/application.js with:
import "../stylesheets/application.scss";
import { setAuthHeaders } from "apis/axios";
setAuthHeaders();
mkdir -p ./app/javascript/src/common
touch ./app/javascript/src/common/logger.js
Paste this:
import Logger from "js-logger";
export const initializeLogger = () => {
/* eslint react-hooks/rules-of-hooks: "off" */
Logger.useDefaults();
if (process.env.RAILS_ENV === "production") {
Logger.setLevel(Logger.OFF);
}
};
Alternative: