2023 complete answer
Building on @thirdydot's answer and @trashgenerator's comment, filling in all the remaining gaps.
If you want to hook up BottomNavigation with react-router-dom then you want the router to hold the single point of truth. This means to rely on useLocation instead of useState to store this aspect of your app's state and Link to change the state.
There's 3 steps to this:
- Make sure you are inside the router context for useLocationto work (see below).
- In BottomNavigationsetvalue={useLocation().pathname}instead ofuseStateandonChange.
- In BottomNavigationActionusecomponent={Link}andto="/signal"and set thevalueto that same path.
src/components/RouterBottomNavigation.js
import { useLocation, Link } from 'react-router-dom';
import { BottomNavigation, BottomNavigationAction } from '@mui/material';
/* import icons */
export default function RouterBottomNavigation() {
  return (
    <BottomNavigation
      value={useLocation().pathname}
      className={classes.root}
    >
      <BottomNavigationAction
        component={Link}
        to="/signal"
        value="/signal"
        label="Signal"
        icon={<ShowChart />}
        className={classes.content}
      />
      <BottomNavigationAction
        component={Link}
        to="/dashboard"
        value="/dashboard"
        label="Dashboard"
        icon={<PermIdentity />}
        className={classes.content}
      />
    </BottomNavigation>
  )
}
How does this work? The location pathname now holds the state for your bottom navigation.
If it's /dashboard then your dashboard BottomNavigationAction is active, because it's value is also /dashboard.
And when you click a BottomNavigationAction that is also a router Link, you change the location pathname to the to value.
On being inside the router comntext
And to be inside of the router context, you could place the RouterBottomNavigation next to the Outlet. For example:
src/index.js
import React from 'react';
import ReactDOM from 'react-dom/client';
import { createBrowserRouter, RouterProvider } from "react-router-dom";
import Root from "./routes/root";
import Dashboard from "./routes/dashboard";
import Signal from "./routes/signal";
const router = createBrowserRouter([
  {
    path: "/",
    element: <Root />,
    children: [
      {
        path: "dashboard",
        element: <Dashboard />,
      },
      {
        path: "signal",
        element: <Signal />,
      },
    ]
  },
]);
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <RouterProvider router={router} />
  </React.StrictMode>
);
src/routes/root.js
import { Outlet } from 'react-router-dom';
import RouterBottomNavigation from "../components/RouterBottomNavigation";
export default function Root() {
  return (
    <>
      <Outlet />
      <RouterBottomNavigation />
    </>
  );
}