This replaces a feature that react-router-dom@6
lost in the upgrade from history@4
to history@5
. Basically, this restores the ability to have a window.location.hash
of #something
instead of #/something
.
In response to a core React Router dev's suggestion, @jtojnar showed that basename="" doesn't match the old hashType="noslash" feature. I asked for that option as a new feature, and I implemented it. This was closed, so I tried a sencod implementation, which also was not accpeted.
My third attempt involved two repositories, history
and React Router. I added a hashRoot
parameter to replicate the old hashType
behavior in history
. A react router maintainer dismissed my changes, but they haven't yet commented on the history
pull request. The same maintainer originally hesitantly suggested we try to solve this at history
.
With react-router-dom@6.1
, the maintainers released a HistoryRouter
class. The primary maintainer expresssed reservations, so the 6.1.1
release reclassified "HistoryRouter" as "unstable_HistoryRouter"! Oh well, it's still usable.
Now, my template is able to replcate the lost hashType="noslash"
of react-router@5
in react-router@6
with some wonky imports:
import { useHashHistory } from "use-hash-history";
import { unstable_HistoryRouter as HistoryRouter } from "react-router-dom";
Eventually, if a new "HistoryRouter" replaces "unstable_HistoryRouter", the impports might look like this:
import { useHashHistory } from "use-hash-history";
import { HistoryRouter } from "react-router-dom";
At any rate, I plan to keep maintaining this project as React Router is updated. I worked on the v1.1.0 release to allow history PR #911 as a drop-in replacement for hashRoot
if that feature were ever merged into history
.